美文网首页
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