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 优点: 简单易用.功能齐全.高性能.轻量级.服务齐 ...
随机推荐
- python httpConnection详解
模块urllib,urllib2,httplib的区别 httplib实现了http和https的客户端协议,但是在python中,模块urllib和urllib2对httplib进行了更上层的封装. ...
- HOOK自绘原理 good
做“HOOK文件打开/保存对话框”的过程中,我首先研究了界面库的相关知识.界面库一般都是由C/C++这种中低级语言编码,这是因为在Windows下的界面库实现技术大都以直接操作控制Windows的消息 ...
- Mono for Android 初学遇到的问题
1.搭建开发环境: 在win7系统中,VS2012 可以用 C# 开发Android 应用程序,mono for andriod 破解成功. 在win server 2008 系统中 破解不成功,具体 ...
- 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)
题目链接:http://pat.zju.edu.cn/contests/ds/3-04 设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行.每行分别先给出多项式非零项的个数.再以指数 ...
- [Machine Learning (Andrew NG courses)]IV.Linear Regression with Multiple Variables
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenFoXzE5OTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- unity 调用android函数
unity 调用android函数 分类: unity2013-12-19 17:54 475人阅读 评论(0) 收藏 举报 unityandroidjar 我们知道,安卓project都有一个And ...
- Indy的评价
已经抛弃了indy,实在是不好,tcp在android下退出报错.我现在改用系统自带的httpclient.推荐RTC RTC带有一个tcp组件,不过处理方式跟indy不同,测试过,在android下 ...
- Delphi与C++的语法区别(六点区别) good
一.Delphi永远没办法在栈上创建一个对象 下面是一段常见的的Delphi代码,在过程的开头声明本过程所需要的全部局部变量: procedure Foo;var obj: TObject; //这句 ...
- 单例模式(Singleton)Holder
public class Singleton { /** * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例 * 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载 */ ...
- (二)----HTTP请求头与响应头
一.HTTP头引入: 正确的设置HTTP头部信息有助于搜索引擎判断网页及提升网站访问速度.通常HTTP消息包括:客户机向服务器的请求消息和服务器向客户机的响应消 息.客户端向服务器发送一个请求,请求头 ...