开发者资讯

 首页 > 开发者资讯 > 编程开发 > 盘点开发者最喜爱的Swift技巧

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

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

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上查看代码片派生到我的代码片
 
  1. func qsort(input: [Int]) -> [Int] {  
  2.     if let (pivot, rest) = input.decompose {  
  3.         let lesser = rest.filter { $0 < pivot }  
  4.         let greater = rest.filter { $0 >= pivot }  
  5.         return qsort(lesser) + [pivot] + qsort(greater)  
  6.     } else {  
  7.         return []  
  8.     }  
  9. }  

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

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

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. import Foundation   
  2. protocol SomeDelegateProtocol : class {  
  3.     func firstFunc() -> String  
  4.     func secondFunc() -> Bool  
  5. }  
  6. class MyClass {  
  7.     weak var delegate : SomeDelegateProtocol?  
  8. }  
  9. class Parent {  
  10.     var child : MyClass  
  11.     var strongDelegate : SomeDelegateProtocol? = nil  
  12.     func setup() {  
  13.         strongDelegate = {  
  14.             // [self]   // Original version had this not commented; it's commented to let people know it was a typo  
  15.             class SomethingClass : SomeDelegateProtocol {  
  16.                 func firstFunc() -> String { return "foo" }  
  17.                 func secondFunc() -> Bool { return true }  
  18.             }  
  19.             return SomethingClass()  
  20.         }()  
  21.         child.delegate = strongDelegate  
  22.     }  
  23.     init() {  
  24.         self.child = MyClass()  
  25.         self.setup()  
  26.     }  
  27. }  
  28. var bleh = Parent()  
  29. var result = bleh.child.delegate?.firstFunc()  
  30. println("Got (result!)")  

 

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

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

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. 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上查看代码片派生到我的代码片
 
  1. public enum ReminderTimeType: String {  
  2.     case Evening = "this evening"  
  3.     case Tomorrow = "tomorrow"  
  4.     case Weekend = "this weekend"  
  5.     case NextWeek = "next week"  
  6.     case CoupleWeeks = "in a couple weeks"  
  7.     case CoupleMonths = "in a couple months"  
  8.     case Someday = "someday"  
  9.     public static let array = [  
  10.         Evening, Tomorrow, Weekend, NextWeek, CoupleWeeks, CoupleMonths, Someday  
  11.     ]      
  12.     public static let rawArray = array.map { $0.rawValue }  
  13. }  

 

Alexis Gallagher——高级iOS开发者

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

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. func typeof(@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上查看代码片派生到我的代码片
 
  1. cd `xcode-select -p`/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx  
  2.     nm -a libswiftCore.dylib | grep "T _swift_stdlib_"  

 

Warren Moore——《Metal By Example》作者

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

Mustafa Furniturewala——Coursera软件工程师

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

文章来源:Realm

分享到:
对于LAMP的思考:性能优化总结
刚刚不经意间查看关于php加速方面的消息,看到了一句话“lamp结构的瓶颈在于M”,感觉是真知灼见,当然这是在理想状态下的情况。对于实际情况下的生产环境来说,需要解决的问题是多种多样的,l-a-m-p在不同阶段需要优化的点是不同的,虽然通过努力最终的瓶颈在于M,但是期间的各种努力也是不容忽视的。下面我就意识流的总结...
敏捷开发流程的方方面面
1.  快速竞品分析   在动手设计前,第一步需要对市面上的同类竞品进行较为深入的分析,提炼出竞品的产品框架、各模块的设计特点,通过对比分析,总结出各竞品的优缺点,取其精华,取其糟粕,真正做到后来居上。   2.  用户行为数据分析       有个竞品分析数据后,还需要结合用户的行为数据进行分析。所以...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……