美文网首页
swift 开发技巧

swift 开发技巧

作者: JoeWcc | 来源:发表于2021-06-08 11:56 被阅读0次

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 开发技巧

      本文链接:https://www.haomeiwen.com/subject/kfgdeltx.html