##引入集合概念 集合是一个没有重复的无序元素集,以下是一些基本操作

var set1 = Set(["a", "b", "c", "d"]) //集合创建
set1.insert("e") //集合插入
set1.remove("a") //删除操作
var set2 = Set(["b", "c", "f"])
set1.subtract(set2) //集合差集
//["e", "d"]
set1.union(set2) //集合并集
//["b","e","f","d","c"]

##if let语句的优化 之前由于optional特性的引入,在做判断时需要层层unwrap,使得代码嵌套严重,影响整洁。

if let name = validateName(nameTextField.text) {
    if !name.isEmpty {
        if let age = validateAge(ageTextField.text) {
            if age > 13 {
                
                // 做相应操作
            }
        }
    }
}

在优化if let之后,能够将判断集中处理,代码瞬间精简许多

if let name = validateName(nameTextField.text),
       age = validateAge(ageTextField.text)
    where age > 13 && !name.isEmpty {
    
                // 做相应操作
}

##as!强制类型转换 强制类型转换体现了苹果对类型安全的重视,相比as?转换失败返回nil,as!转换失败会引发运行时错误。这就需要程序员在转换时引起注意。

class A{}
class B:A{}

var a:A? = A()
var b:B? = a as? B //此时b为nil

var c:B? = a as! B //运行时错误,程序崩溃

另外在从objective-C到Swift基本类型转换时需要显示转换,反之不用

var nsstr1:NSString = NSString(string: "hello")
var str1:String = nsstr1 as String

var nsarray:NSArray = NSArray()
var array:[AnyObject] = nsarray as [AnyObject]

var nsdict:NSDictionary = NSDictionary()
var dict:Dictionary = nsdict as Dictionary

Xcode一般会给出类型转换的提示,但是由于beta版的不稳定,导致SourceKit崩溃而无法提示,导致编译过程中出现segment fault问题。以下是出错代码段。

class func changePassword(oldpassword: String, newpassword: String, doneAction:()->()) {
    
    API_USERS_CHANGE_PASSWORD.cancel()
    var api: API_USERS_CHANGE_PASSWORD = API_USERS_CHANGE_PASSWORD()
    
    //以参数形式构造的字典在Xcode6.3 beta2中会导致SourceKit崩溃
    var req = ["old_password": oldpassword, "new_password": newpassword] as NSDictionary
    //api.req是objective-C经bridge转换成代码,原objective-C中api.req接收NSDictionary的赋值,但是经bridge转换后,需要Dictionary值。
    api.req = req //api.req(Dictionary) = req(NSDictionary) 在赋值时没有编辑器错误警告,导致执行编译,最后出现编译不通过情况
    
    //正确的写法如下,是不需要在通过NSDictionary中转,直接赋值即可
    api.req = ["old_password": oldpassword, "new_password": newpassword]
    api.whenSucceed = {
        [unowned api] in
        doneAction()
    }
    api.whenFailed = {
        println("修改密码失败")
    }
    api.send()
}

Xcode是自带升级Swfit代码的功能,但是并不完善,甚至有荒谬的转换。所以还需要人工去仔细排查。有时候单纯通过编译器检查并不能确保运行时正确。