十个技巧让你成为更加优秀的 Swift 工程师

file

介绍

你已经和 Swift 一起待了好几个月了。现在,你想成为一个更好的 Swift 开发者吗?干货,点心,而不是湿货?我为你带来了金块。
请原谅我的格式化,为了简洁我尽可能地减少了行数。随意复制粘贴到 Playground 中,来检查一切是否正常。 ? 如果不正常,请在下面评论,我将尽快修复它们。
我的话有点多了。让我们开始吧。

1. 扩展

示例:一个数的平方

// 好的版本
func square(x: Int) -> Int { return x * x }

var squaredOFFive = square(x: 5)

square(x:squaredOFFive) // 625

无用的变量被创建出来表示 5 的平方—我们不需要享受打字的过程。

// 更好的版本
extension Int {
 var squared: Int { return self * self }
}

5.squared // 25

5.squared.squared // 625

扩展课程

2. 泛型

示例: 打印数组中所有元素

// 糟糕的代码
var stringArray = ["Bob", "Bobby", "SangJoon"]
var intArray = [1, 3, 4, 5, 6]
var doubleArray = [1.0, 2.0, 3.0]

func printStringArray(a: [String]) { for s in a { print(s) } }

func printIntArray(a: [Int]) { for i in a { print(i) } }

func printDoubleArray(a: [Double]) {for d in a { print(d) } }

太多无用的函数。让我们只创建一个。

// 很棒的代码
func printElementFromArray<T>(a: [T]) {
 for element in a { print(element) }
}

3. For 循环 vs While 循环

示例:打印 5 次 "Count"

// 好的代码
var i = 0

while 5 > i {
  print("Count")
  i += 1
}

你创建了变量 "i" 来确保计算机不会因打印有限的数字而中断

听着,更多的变量 → 更多的内存 → 更头疼 → 更多的错误 → 更多生活难题。

记住蝴蝶效应。

// 更好的代码
for _ in 1...5 { print("Count") }

"华丽" --- Bob

4. 可选值解包

示例: Gaurd let vs if let

编写一个欢迎新用户的程序。

var myUsername: Double?
var myPassword: Double?

// 糟糕的代码
func userLogIn() {
 if let username = myUsername {
  if let password = myPassword {
   print("Welcome, \(username)"!)
  }
 }
}

看见宛如厄运金字塔般的代码了吗?这些代码层层嵌套。放弃这种写法。尝试用一种更优雅的方式实现吧。

// 优雅的代码
func userLogIn() {
 guard let username = myUsername, let password = myPassword
  else { return }
 print("Welcome, \(username)!")
}

这个区别很明显。如果 username 或 password 值为空,优雅的代码(指下面的代码)将执行返回提前退出函数。 如果值不为空,程序将输出欢迎信息。代码不会繁冗。?

5. 计算属性 vs 函数

示例:找出圆的直径

// ? 代码
func getDiameter(radius: Double) -> Double { return radius * 2}
func getRadius(diameter: Double) -> Double { return diameter / 2}

getDiameter(radius: 10) // return 20
getRadius(diameter: 200) // return 100
getRadius(diameter: 600) // return 300

你创建了两个相互独立的函数。穷凶极恶!让我们将半径和直径联系起来。

// 好的代码
var radius: Double = 10

var diameter: Double {
 get { return radius * 2}
 set { radius = newValue / 2}
}

radius // 10
diameter // 20
diameter = 1000
radius // 500

现在,半径和直径变量彼此相互依赖。更多的联系 → 减少额外的打字 → 更少的错别字 → 更少的问题 → 更少的生活难题。 ?

6. 类型安全的枚举

示例:卖票

// 简直糟糕

switch person {
 case "Adult": print("Pay $7")
 case "Child": print("Pay $3")
 case "Senior": print("Pay $4")
 default: print("You alive, bruh?")
}

"Adult", "Child", "Senior" → 你在硬编码。你实际上是为每种情况键入所有这些字符串值。不行不行。我解释了当你写得太多时会发生什么。我们从来不享受打字。

// 优雅的代码
enum People { case adult, child, senior }
var person = People.adult
switch person {
 case .adult: print("Pay $7")
 case .child: print("Pay $3")
 case .senior: print("Pay $4")
}

你将不会写错别字,因为".adult", ".child", ".senior" 是高亮显示的。如果 switch 语句遇到超出设计过的枚举的未知情况,Xcode 将在左侧用红色错误(?)醒目地提醒—我只是没有找到正确的表情。

7. Nil 合并

示例:用户选择 Twitter 的主题颜色

// 冗长的代码

var userChosenColor: String?
var defaultColor = "Red"
var colorToUse = ""

if let color = userChosenColor { colorToUse = color } else
 { colorToUse = defaultColor }

太长了吧。让我们来为它瘦身。

// 着实简洁

var colorToUse = userChosenColor ?? defaultColor

上面的代码表示,如果 userChosenColor 返回 nil,选择 defaultColor( red )。 否则,选择 userChosenColor。

8. 条件合并

示例:如果你有尖尖的头发就增加高度

// 简直啰嗦
var currentHeight = 185
var hasSpikyHair = true
var finalHeight = 0

if hasSpikyHair { finalHeight = currentHeight + 5}
 else { finalHeight = currentHeight }

太长了,瘦身。

// 优雅的代码
finalHeight = currentHeight + (hasSpikyHair ? 5: 0)

上面的代码表示,如果 hasSpikeHair 是 true,finalHeight 加 5,否则加 0。

9. 函数式编程

示例:获取偶数

// 命令式 (也称为无聊式)
var newEvens = [Int]()

for i in 1...10 {
 if i % 2 == 0 { newEvens.append(i) }
}

print(newEvens) // [2, 4, 6, 8, 10]

我不需要看整个过程。我在浪费时间去回顾你的 for 循环是怎样的。让我们明确它。

// 声明式 ?
var evens = Array(1...10).filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6, 8, 10]

函数式编程是惊人的。

函数式编程使你看起来很聪明。

10. 闭包和方法

// 普通的方法
func sum(x: Int, y: Int) -> Int { return x + y }
var result = sum(x: 5, y: 6) // 11

你不需要记住任何与方法有关的名字和变量——你只需要一个美元符 $

// 闭包
var sumUsingClosure: (Int, Int) -> (Int) = { $0 + $1 }
sumUsingClosure(5, 6) // 11

是不是超酷的!

最后的讨论

我知道上文只讲了一部分关于如何成为一名更好的 Swift 开发者的内容。现在,如果你想要学习更多的高阶内容,例如异常处理、内存管理、高级枚举、协议和闭包,欢迎加入我的课程“和 Bob 一起学习 Swift”。如果你希望得到一个私有折扣链接,可以在这里注册。

关于我

一名来自韩国的 iOS 开发者,欢迎在 Instagram 上关注我或者在我的 LinkedIn 上获取完整的个人介绍

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://www.bobthedeveloper.io/blog/10-t...

译文地址:https://learnku.com/app/t/23239

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!