盘点开发者喜爱的Swift技巧

更新时间:2014-12-29 10:22:04点击次数:2566次

摘要:Swift发布才半年左右,却已深得众多开发者的青睐,也有了许多学习资源、项目和开发工具。在本文中,来自objc.io、LinkedIn等各个公司的软件工程师及开发者总结了自己在接触Swift过程中喜爱的贴士与技巧。


屈指算来,Swift语言才发布半年左右,却已深得众多开发者的青睐,也有了许许多多的学习资源、项目和工具。在本文中,来自objc.io、LinkedIn等各个公司的软件工程师及开发者总结了自己在接触Swift过程中喜爱的贴士与技巧,有些技巧即使是很早就入坑Swift的开发者都不知道,不妨一起来了解一下吧。


Natasha Murashev——Capital One iOS工程师、Natasha The Robot博主


当我在构建iOS应用时,Swift能够允许更多的函数式编程方法,所以,为了能在改善Swift代码时做出更好的决策,我一直在学习函数式编程。迄今为止,我喜欢的函数方面的Swift资源有:


功能型函数——能轻松更改函数,让代码更独立、可测试。

包装类型——我喜欢用可读且安全的类型别名来编写代码。

类型设计——在设计程序时大幅使用正确的类型,有利于编译器调试。

Swift中柯里化函数的运用——在Haskell中,某种类型的函数指针只能指向特定参数类型和数目以及返回值类型的函数,而Swift则允许“currying”或部分应用函数,从而实现代码块可重复使用。

Swift奇妙的差错处理——与Objective-C相比,我特别喜欢这种简单、可读性强而又安全的错误处理方式。

面向对象编程直达车——它为在代码中进行错误处理提供了一种快捷的方式,于程序猿而言,幸福之事莫过于此。

Swift函数式编程——这是一本关于Swift函数比较深度的书籍,我每次重新读过时都会发现不一样的点,非常适合想要深入研究Swift函数以及如何将其运用到iOS代码中的开发者们阅读。

Chris Eidhof——objc.io创始人、《Swift函数式编程》作者


快速排序(Quicksort)——Swift中的快速排序实现可以说是前无古人后无来者,大多数Quicksort实现都需使用固定的内存,而Swift则能以简洁清晰的程序实现快排:


[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

func qsort(input: [Int]) -> [Int] {  

    if let (pivot, rest) = input.decompose {  

        let lesser = rest.filter { $0 < pivot }  

        let greater = rest.filter { $0 >= pivot }  

        return qsort(lesser) + [pivot] + qsort(greater)  

    } else {  

        return []  

    }  

}  

Austin Zheng——LinkedIn高级软件工程师


我认为,精妙的Swift技巧应当如此:开发者可以通过创建一个已定义标准类的闭包来为匿名类实例设置委托,而闭包则将返回该类的一个新实例,并运行。示例代码如下:



[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

import Foundation   

protocol SomeDelegateProtocol : class {  

    func firstFunc() -> String  

    func secondFunc() -> Bool  

}  

class MyClass {  

    weak var delegate : SomeDelegateProtocol?  

}  

class Parent {  

    var child : MyClass  

    var strongDelegate : SomeDelegateProtocol? = nil  

    func setup() {  

        strongDelegate = {  

            // [self]   // Original version had this not commented; it's commented to let people know it was a typo  

            class SomethingClass : SomeDelegateProtocol {  

                func firstFunc() -> String { return "foo" }  

                func secondFunc() -> Bool { return true }  

            }  

            return SomethingClass()  

        }()  

        child.delegate = strongDelegate  

    }  

    init() {  

        self.child = MyClass()  

        self.setup()  

    }  

}  

var bleh = Parent()  

var result = bleh.child.delegate?.firstFunc()  

println("Got \(result!)")  

Clay Smith——PagerDuty高级软件工程师


下面是我在处理所有Xcode问题(尤其是sourcekit)时所使用的基本的Bash alias(命令别名),用来删除Xcode中的Derived Data:


[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

alias sourcekitsad='rm -rf ~/Library/Developer/Xcode/DerivedData'  

Michael Helmbrecht——Motiv UX设计师兼iOS开发者


于我而言,喜欢的一点应该是Swift能在String类型和NSString类型中自动转换,当无法打印String时,通过直接调用NSString的-description方法即可实现。


David Kobilnyk——ShopRunner软件工程师


作为一门编程语言,我觉得Swift还不够优雅,而我也并没有发现什么太特别的技巧,只是很喜欢原始类型、枚举一起使用,就像这样:


[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

public enum ReminderTimeType: String {  

    case Evening = "this evening"  

    case Tomorrow = "tomorrow"  

    case Weekend = "this weekend"  

    case NextWeek = "next week"  

    case CoupleWeeks = "in a couple weeks"  

    case CoupleMonths = "in a couple months"  

    case Someday = "someday"  

    public static let array = [  

        Evening, Tomorrow, Weekend, NextWeek, CoupleWeeks, CoupleMonths, Someday  

    ]      

    public static let rawArray = array.map { $0.rawValue }  

}  

Alexis Gallagher——高级iOS开发者


要说我喜欢的Swift技巧,应该有两个,一个是在REPL中,handy函数可直接用于获取表达式静态类型,而想要获取任意实例值的类型名称则可直接调用_stdlib_getDemangledTypeName。


[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

func typeof<T>(@autoclosure () -> T) -> Any.Type { return T.self }  

JP Simard——Realm iOS工程师


开发者可以直接使用nm工具通过libswiftCore.dylib来获取所有私有的Swift标准库函数,比如_stdlib_getTypeName()、_stdlib_demangleName()和_stdlib_conformsToProtocol():


[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

cd `xcode-select -p`/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx  

    nm -a libswiftCore.dylib | grep "T _swift_stdlib_"  

Warren Moore——《Metal By Example》作者


当结构体中的所有成员属于同一类型时(比如浮点型),通过Swift,开发者可以将其中的同类数组作为一个指针指向结构体中的成员类型。这一方法,让我能够非常简便地去创建顶点数据的Metal缓冲区,而无需其他多余的复杂操作。


Mustafa Furniturewala——Coursera软件工程师


我喜欢的Swift资源是Swifter,对我来说,它是编程必备的参考指南,而喜欢的技巧则是开发者可以使用任意的Swift函数来实现Objective-C风格的动态分配。


文章来源:Realm

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息