设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

从Objective-C到Swift—Swift糖果

2014-6-30 14:50| 发布者: joejoe0332| 查看: 5871| 评论: 0|原作者: GoodLoser, chasehong|来自: oschina

摘要: Swift带来很多确实很棒的特性,使得很难再回到Objective-C。主要的特性是安全性,不过这也被看成是一种额外副作用。

  Swift带来很多确实很棒的特性,使得很难再回到Objective-C。主要的特性是安全性,不过这也被看成是一种额外副作用。


带类型接口的强型别

  Swift有强型别,这意味着除非你要求,不然Swift不会为你做类型之间的转换。所以,例如你无法把Int型赋给Double型。你不得不首先转换类型:

let i: Int = 42
let d: Double = Double(i)


  或者你必须给Double类扩展一个方法用来转换Int型:

extension Double {
    func __convert(i: Int) -> Double {
        return Double(i)
    }
}
let another_d: Double = i


  强型别对于安全性是非常非常有利的。但是,如果它没有为你给类型接口添加许多类型信息的话,它也可能变成有一点令人生畏的事情,有点像是在写脚本语言。

let ary = ["Hello", "world"] // NOTE: 'ary' is of type String[] or Array<String>
for s in ary { // NOTE: 's' is of type String
    print(s + " ")
}


  如果你想要创建一个包含很多类型(无共同祖先)的数组,你应该用枚举(它可以包含值,见如下)。如果你想要它能够包含所有值,你可以用Any型。如果想让它包含任何Objective-C的类型,那就用AnyObject型。

  请注意类型接口不会在申明函数的时候为你添加类型。你必须明确地说明你所申明函数的类型。


Blocks

  Swift 中的Blocks很像Objective-C中的Blocks, 不过有两点不同: 类型推断和避免weakify dance.


  对于类型推断,你不必每次写block时都包含完整类型信息:

sort([2,1,3], {
    (a: Int, b: Int) -> Bool in return a < b
})

// Using Type Inference
// Using the Trailing Closures feature

sort([2,1,3]) {
    a, b in return a < b
}

// Implicit 'return' for single-expression blocks

sort([2,1,3]) { a,b in a<b }

// Shorthand Argument Names

sort([2,1,3]) { $0 < $1 }

// Operators are functions, and functions are blocks too!

let sorted: Int[] = sort([2,1,3], <)


  访问 Closures 了解更多blocks信息。


  除此之外,Objectvie-C 的weakify dance有点容易,只需在block的开始处加上  [unowned self] 或 [weak self]  即可。

class CallbackTest {
    var i = 5
    var callback: (Int -> ())? // NOTE: The optional callback takes an Int
    deinit { // NOTE: This is like -dealloc in Objective-C
        println("Deinit")
    }
}

var obj = CallbackTest()
obj.callback = {
    [unowned obj] // NOTE: Without this, deinit() would never be invoked!
    a in
    obj.i = a
}


  请注意Introduction post文章中介绍了Optional(像上面的callback)。


  请参考 ARC 章节来了解更多关于Swift中ARC的信息。



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部