分享

盘点开发者最喜爱的Swift技巧

 北书房2014 2016-06-14

前言

每每编译Swift的文章时,总有种花样作死的感觉。对于任何一个专业词汇,都要费尽心思地去Google查询,翻阅中英两版的《Swift Programming Language》,仔细对比。不过翻译完,成就感却比其他文章多得多。对Swift总有种莫名的好感,也许是因为是苹果粉,也许仅仅只是因为Swift本身。这篇文章在发布并在微博推广之后,得到了包括唐巧、SwiftLanguage等在内的技术专家好评,起初非常忐忑的心也终于得以安定。

屈指算来,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则能以最简洁清晰的程序实现快排:


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


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:


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

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

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

David Kobilnyk——ShopRunner软件工程师

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

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。 


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

JP Simard——Realm iOS工程师

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


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风格的动态分配。


本文首发:CSDN,英文原文出自:Realm

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多