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 优点: 简单易用.功能齐全.高性能.轻量级.服务齐 ...
随机推荐
- JQuery+AJax - 无刷新使用验证码
最终效果: 项目目录: Default.aspx前端代码: <%@ Page Language="C#" AutoEventWireup="true" C ...
- OpenStack使用Bosh部署CloudFoundry(一)—准备OpenStack环境
版本说明: CloudFoundry:V2版本 OpenStack:Folsom或者Grizzly版本 本篇文章采用OpenStack Folsom+nova-network的OpenStack环境, ...
- Linux下套接字具体解释(三)----几种套接字I/O模型
參考: 网络编程–IO模型演示样例 几种server端IO模型的简介及实现 背景知识 堵塞和非堵塞 对于一个套接字的 I/O通信,它会涉及到两个系统对象.一个是调用这个IO的进程或者线程,还有一个就是 ...
- MFC-消息分派
前言 由于工作需要,这几天学了一点MFC,在AFX里看到很多熟悉的东西,如类型信息,序列化,窗口封装和消息分派.几乎每个界面库都必须提供这些基础服务,但提供的手法却千差万别.MFC大量地借用了宏,映射 ...
- 内网穿透神器ngrok(转)
相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...
- JSTL解析——004——core标签库03
上面章节主要讲解<c:forEach>标签,下面讲解其它标签 1.<c:forTokens>标签 forTokens标签与forEach标签类似,独有begin.end.ste ...
- 怎样高速正确的安装 Ruby, Rails 执行环境
对于新入门的开发人员,怎样安装 Ruby, Ruby Gems 和 Rails 的执行环境可能会是个问题,本页主要介绍怎样用一条靠谱的路子高速安装 Ruby 开发环境. 次安装方法相同适用于产品环境! ...
- 超声波模块SRF05
//////////////////////////////////////////////////////////////////////////////// // // PIC16F877 ...
- 《c陷阱与缺陷》笔记--移位运算
#include <stdio.h> int main(void){ int a = 2; a >> 32; a >> -1; a << 32; a & ...
- python web
[root@xen202 wbk]# python -m SimpleHTTPServerServing HTTP on 0.0.0.0 port 8000 ...