新版的swift中 ..操作符已经更换为 ..<
空数组的声明由原来的 Sttring[]()变为[String]()
let blackHeart = "\u2665" 改为 let blackHeart = "\u{2665}" \u等转义字符时后面的数字要被{}括起来
闭包相关:
makeIncrementor来自http://www.cocoachina.com/ios/20140607/8717.html
func makeIncrementor(forIncrement amout: Int )->()->Int {
var runningTotal = 0
func incrementor() -> Int{
runningTotal += amout
return runningTotal
}
return incrementor
}
let incrementBySeven = makeIncrementor(forIncrement: 7)
println(incrementBySeven)
println(incrementBySeven());
println(incrementBySeven());
输出为下:
(Function)
7
14
相比较“一个函数返回没有输入的函数”,以下是“一个函数返回有输入参数的函数”
func myIncrementor(forIncrement amout: Int) -> (b: Int) -> Int{
var runningTotal = 0
func incrementor(b: Int) -> Int{
runningTotal += amout + b ;
return runningTotal
}
return incrementor
}
let incrementBySevenAndThree = myIncrementor(forIncrement: 7)
println(incrementBySevenAndThree)
println(incrementBySevenAndThree(b: 3))
println(incrementBySevenAndThree(b: 3))
输出为下:
(Function)
10
20
关于Swift中的!和?
像Java这种语言中,
定义一个字符串
String aString ="Hello World";
如果想将aString 设置为null 可以直接这样操作
aString = null;
但是swift中将null(nil)这种类型当作一种比较特殊的类型
在swift中如果你声明一个String 变量:
var aString: String = "Hello world";
如果你想将其设置成Nil
aString = nil;
xcode会报错cannot assign a value of type 'nil' to a value of type 'String'
如果你声明aString 时候在类型后面加上?,此时aString类型是String?(optional value) 不在是String,如下:
var aString: String? = "Hello";
aString = nil ;
就没问题了
关于!,类型后面加!的类型在苹果官方发布的<The swift programming language >(第2版)中叫做 implicitly unwrapped optional ,官方文档是这么解释的(P97)
An implicitly unwrapped optional is a normal optional behind the scenes,but can also be used like a nonoptional value ,without the need to unwrap the optional value each time it is accessed .
大致就是说,implicitly unwrapped optional(iuo)这种声明方式在语言中的实现方式与optional v 是一致的,而且可以像optional这样一样使用,但是每次访问的的时候不需要再次解析
后面提供了一个例子:
let possibleString: String? = "An optional string."
let forcedString: String = possibleString!
let assumed: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString