在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
距离Apple推出Swift已经有几天了,网上也时不时出现“急招Swift程序猿,要求有一天工作经验”的帖子。 看到Swift,除了苹果放的另外一门语言的链接(http://swift-lang.org/),还可能联想到Taylor Swift。或者铃木雨燕。 这几天网上关于Swift的话题和材料应该迅速膨胀,比方StackOverflow的相关标签,还有知乎上的一些相关讨论。 关于Swift的推出,我个人觉得对现有的使用Objective-C的iOS开发人员不算是非常大的冲击,毕竟写代码这门功夫,比較注重内功修炼。而对于功能越强大越灵活的语言。有可能高手拉开的距离更大。比方我非常久曾经转载的一篇怎样消除Python列表中的反复元素。 初步看下来,觉得Swift有点像JavaScript,又有点Python的风格,再看还有C++的特性。总的下来。有点“杂糅”或“博採众长”的味道,下面是一些基础代码演示样例: 为了体现playground的效果,我在这里上传了截图,而不是直接贴代码。讲到这个,可见从某种角度来看,大家都在同一起跑线上,毕竟连怎么看日志输出都能够在SO上收获非常多reputation,哈哈。 上面的代码我仅仅截取了部分。还有部分例如以下: var arr = [0, 1, 2] for item in arr { println(item) } var dict = ["k1": "v1", "k2": "v2"] for item in dict.keys { var s = item + dict[item]! println(s) } 我随手写了遍历数组和字典的代码。结果遇到问题了。 注意倒数第三行末尾有个感叹号。假设不加这个感叹号,会报错: 这里提到了“optional type”、“String?”和“not unwrapped”等概念。 在《The Swift Programming Language》的Language Guide - The Basics这一章中,紧跟Tuples小节的就是Optionals小节(之前的A Swift Tour也有掠过)。 依据这一小节开头的两行演示样例代码。我们能够得知有一种新类型是在既有类型后面加问号?: 这样的类型叫做“Optional Type”。參考Swift的类型声明,我们尝试声明Optional类型看看: var oVar: Optional 编译器会报错: Playground execution failed: error: <REPL>:46:11: error: reference to generic type 'Optional' requires arguments in <...> var oVar: Optional ^ generic type 'Optional' declared here 依据错误提示,我们能够得知这是个泛型类型。须要指定详细的类型: var oVar: Optional<Int> 于是我们能够跳进去查看Optional的详细定义: enum Optional<T> : LogicValue, Reflectable { case None case Some(T) init() init(_ some: T) /// Allow use in a Boolean context. func getLogicValue() -> Bool /// Haskell's fmap, which was mis-named func map<U>(f: (T) -> U) -> U? func getMirror() -> Mirror } 此时再看剩下的代码: 再结合官方文档的描写叙述,能够得到例如以下几点结论:
在ARC这一章中有一节叫“Unowned References and Implicitly Unwrapped”讨论了一种适用场景。除此之外,Optional Chaining也给了整整一个章节,这里就不继续展开了。 :) |
请发表评论