swift 新功能介绍
原文链接:http://www.cocoachina.com/applenews/devnews/2014/0617/8857.html
Programming Language,我强烈建议你先读它。这篇文章仅仅会讨论一些特别 cool、值得玩味的知识点。
String:
- // automatically inferred
- var name1 = "Matt"
- // explicit typing (optional in this case)
- var name2: String = "Matt"
在
Swift 中,编译器(大部分情况如此,偶有例外)知道一个对象的完整类型。这让它能够做决定来怎么编译代码。
- Person *matt = [[Person alloc] initWithName: @"Matt Galloway"];
- [matt sayHello];
- var matt = Person(name: "Matt Galloway");
- matt.sayHello()
但有时候你对于不同的数据类型。可能都须要相似的功能。
- struct IntPair {
- let a: Int!
- let b: Int!
- init(a: Int, b: Int) {
- self.a = a
- self.b = b
- }
- func equal() -> Bool {
- return a == b
- }
- }
- let intPair = IntPair(a: 5, b: 10)
- intPair.a // 5
- intPair.b // 10
- intPair.equal() // false
- struct Pair {
- let a: T!
- let b: T!
- init(a: T, b: T) {
- self.a = a
- self.b = b
- }
- func equal() -> Bool {
- return a == b
- }
- }
- let pair = Pair(a: 5, b: 10)
- pair.a // 5
- pair.b // 10
- pair.equal() // false
- let floatPair = Pair(a: 3.14159, b: 2.0)
- floatPair.a // 3.14159
- floatPair.b // 2.0
- floatPair.equal() // false
可能这还不够清楚说明你如今为什么要使用这一功能,可是相信我:机会无限!你非常快就会在你的代码中用到它了。
幸运的是,他们很相像。你能够这样来声明一个数组和字典:
- let array = [1, 2, 3, 4]
- let dictinary = ["dog": 1, "elephant": 2]
- let array: Array = [1, 2, 3, 4]
- let dictinary: Dictionary = ["dog": 1, "elephant": 2]
- let array: Int[] = [1, 2, 3, 4]
这听起来不那么方便,可是毋庸置疑地实用:你的 API 再也不用长篇累牍地解释它返回的数组中会保存什么内容。或者一个属性里面可以保存什么内容,你可以把这些问题交给编译器,由它来进行前期的错误检查和优化。是更明智的做法。
与 Objective-C 不一样。Array 和 Dictionary 并不存在一个可变版本号。你仅仅能通过 let 和 var 来区分它们。对于那些还没有读过原书,或者还未深入 Swift 的读者(我建议你们读一下。尽快!
),仅仅须要知道 let 用来声明常量。var 用来声明变量。let 有点类似于 C/C++/Objective-C 中的 const。
- let array = [1, 2, 3]
- array.append(4)
- // error: immutable value of type 'Array' only has mutating members named 'append'
比方,假设大小不能改变,那么已经保存的值就永远不用考虑又一次分配以接纳新值。所以,对于不会发生变化的集合对象,总是使用 let 来声明是一种非常好地做法。
- Person *person = ...;
- NSMutableString *description = [[NSMutableString alloc] init];
- [description appendFormat:@"%@ is %i years old.", person.name, person.age];
- if (person.employer) {
- [description appendFormat:@" They work for %@.", person.employer];
- } else {
- [description appendString:@" They are unemployed."];
- }
相同的事情 Swift 里面做起来就是这样:
- var description = ""
- description += "\(person.name) is \(person.age) years old."
- if person.employer {
- description += " They work for \(person.employer)."
- } else {
- description += " They are unemployed."
- }
在 Objective-C 中,NSString 总是依照 UTF16 来计算长度。把每两个字节当成一个字符,但技术上说这并不总是正确的,由于有些 Unicode 字符会占用 2 个以上的字节。
- var poos = "? ? ? ??? ?? "
- countElements(poos) // 2
- var eUmlaut = "e\u0308" // ë
- countElements(eUmlaut) // 2
- if ([person.name isEqualToString:@"Matt Galloway"]) {
- NSLog(@"Author of an interesting Swift article");
- } else if ([person.name isEqualToString:@"Ray Wenderlich"]) {
- NSLog(@"Has a great website");
- } else if ([person.name isEqualToString:@"Tim Cook"]) {
- NSLog(@"CEO of Apple Inc.");
- } else {
- NSLog(@"Someone else);
- }
- switch person.name {
- case "Matt Galloway":
- println("Author of an interesting Swift article")
- case "Ray Wenderlich":
- println("Has a great website")
- case "Tim Cook":
- println("CEO of Apple Inc.")
- default:
- println("Someone else")
- }
- switch i {
- case 0, 1, 2:
- println("Small")
- case 3...7:
- println("Medium")
- case 8..10:
- println("Large")
- case _ where i % 2 == 0:
- println("Even")
- case _ where i % 2 == 1:
- println("Odd")
- default:
- break
- }
swift 新功能介绍的更多相关文章
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- 原创开源项目HierarchyViewer for iOS 2.1 Beta新功能介绍
回顾 HierarchyViewer for iOS是我们发布的一个开源项目,采用GPL v3.0协议. HierarchyViewer for iOS可以帮助iOS应用的开发和测试人员,在没有源代码 ...
- fedora21发布与新功能介绍(附fedora21安装教程与fedora21下载地址)
fedora21发布与新功能介绍(附fedora21安装教程与fedora21下载地址) 最新的Fedora 21终于正式发布了,Fedora Server 是一款强大可定制化的操作系统,包括了最好最 ...
- Unity User Group 北京站:《Unity5.6新功能介绍以及HoloLens开发》
时间一转眼从春天来到了初夏,Unity User Group(以下简称UUG)活动也迎来了第七期.我们面向Unity3D开发从业者以及未来想从事Unity3D开发的学生群体的UUG活动这次仍然在海淀 ...
- Eviews 8.0&9.0界面新功能介绍
Eviews 8.0&9.0界面新功能介绍 本文其中一些是自己的整理,也有一些是经管之家论坛中一位热心.好学坛友的整理,其中只是简单介绍一下这两个新版本的部分特性,分享出来,有兴趣的看客可以一 ...
- Kafka 0.11新功能介绍:空消费组延迟rebalance
Kafka 0.11新功能介绍:空消费组延迟rebalance 在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer inst ...
- DevExpress v15.2新功能介绍视频(25集全)
DevExpress v15.2新功能介绍视频(25集全) http://www.devexpresscn.com/Resources/Documentation-508.html DevExpres ...
- 【Linux】Ubuntu18.04镜像下载,新功能介绍
一.Ubuntu18.04镜像下载 官方下载地址:http://releases.ubuntu.com/18.04/ 官方64位iso下载地址:http://releases.ubuntu.com/1 ...
- ORM 创新解放劳动力 -SqlSugar 新功能介绍
介绍 SqlSugar是一款 老牌 .NET 开源ORM框架,由果糖大数据科技团队维护和更新 ,Github star数仅次于EF 和 Dapper 优点: 简单易用.功能齐全.高性能.轻量级.服务齐 ...
随机推荐
- zipalign 文件路径问题
在使用zipalign,对Android程序进行打包,有些时候可能提示找不到zipalign ,可以复制一份放在相应的文件夹就行了 windows: 如果缺少zipalign,在网上找到相应的文件放在 ...
- Perl BEGIN块和END块
[root@wx03 5]# cat a5.pl END {print cccccccccccc."\n"}; print "aaaaaaaaaaaaa\n"; ...
- python与其它语言进行比較
近期python语言貌似比較火, 今天闲来无事,简单的看了下,算是个入门吧.一门语言之所以值得这么多人去学,必然有它的独到之处,以下我们就用python和其它语言做个比較. Pythond VS C# ...
- hdu1869 六度分离(Floyd)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869 转载请注明出处:http://blog.csdn.net/u012860063?viewmode ...
- Android使用SharedPreferences保存数组
核心原理: 对象序列化 步骤 1.要保存的对象实现序列化Serializable 2.将序列化的对象保存String(本文的做法是保存为byte数组在转为16进制的String类型保存起来) 3.将保 ...
- A Very Easy Triangle Counting Game
题意:在圆上取n个点,相邻两个点之间连线,(注意,n和1相邻),然后所有点对(i ,i+2)相连,问能形成的不同的三角形有多少个? 思路:找规律 n=3,cnt=1; n=4,cnt=8; n=5 c ...
- POJ 1862 & ZOJ 1543 Stripies(贪心 | 优先队列)
题目链接: PKU:http://poj.org/problem?id=1862 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...
- Swift - 属性观察者(willSet与didSet)
属性观察者,类似于触发器.用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应.有如下特点: 1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet. ...
- 全民Scheme(0):lat的定义
接下来我会写一写Scheme的学习笔记.嗯,Scheme是属于小众的语言,但合适用来教学的. 什么是lat,就是遍历list里的每一个S-expression,假设发现当中某个不是atom的,则返回f ...
- android binder机制之——(创建binder服务)
Binder机制编程 前面的几篇文章具体介绍了android中binder机制的方方面面,相信你对binder机制已经有了较深刻的理解.俗话说得好"学以致用",以下我们就通过在 ...