5

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

 2 years ago
source link: https://zhuanlan.zhihu.com/p/43119391
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

摈弃世俗浮躁,追求技术精湛

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

示例:一个数的平方

// 好的版本
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

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

// 糟糕的代码
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 上获取完整的个人介绍

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK