天天看點

讓你看不懂的swift文法

一、Swift雜談

Swift文法出來時間不長,網絡上的各種教程已經鋪天蓋地,可是基本上全部的教程都是來自官方翻譯。

從Swift出來到如今。每天都在學習Swift。以下給出個人感受

  1. Swift中的非常多概念來源于Objective-c(擴充、協定、外部參數名、閉包記憶體管理等),假設是Objective-c的老手能夠非常快入手
  2. Swift融合了衆多語言的特性。入手簡單可是短時間掌握全部文法還是有困難的
  3. Swift開發應用更加高速,語言簡單介紹,包含了非常多的進階特性

盡管Swift語言非常easy,手機相對于Objective-c要快。可是一些原理的東西還是起源于Objective-c。架構中盡管包含了Swift API,可是API的設計非常多都是蘋果特有的,掌握一直到熟練,個人感覺與學習Objective-c不會相差太多。Swift是一個拉開檔次的語言,我想他的出現會終結靠Objective-c文法吃飯那些人的高薪。對于那些懂得思想的人,Swift會成為一把利劍。讓高手開發起來更加得心應手

二、那些你看不懂的文法

Swift的一些文法還是比較有意思的,這裡給出幾個小的代碼片段,測試一下你看懂了沒有:

1、隐式類型與拆封(?

與!)

let possibleString: String?      

= "An optional string."

if possibleString {

println(possibleString)

}

let number1 = possibleString!.toInt()

//compile error

let number2 = possibleString.toInt()

2、String是struct。NSString是一個class,他們之間的關系

var str: String = "str"
var nsStr: NSString = "NSString"
var selector: Selector = "selector"
var selector2: Selector = Selector("")

str = nsStr
nsStr = str      

3、元組的類型怎麼寫

var tuple: (str: Int, str2: Int) = (2, 3)
tuple.str = 4
tuple.1 = 2
let tuple2 = (4, 5)
//compile error
let2.0 = 1      

4、閉包聲明

var closurea: (Int, Int) -> Bool = { n1, n2 in return n1 > n2}
var closureb: (Int, Int) -> Bool = {$0 > $1}      

5、閉包傳引用還是複制。以下列印多少

func add(#number: Int) -> () -> Int {
    var ret = 0
    func incrementor() -> Int {
        ret += number
        return ret
    }
    return incrementor
}

let incrementor = add(number: 10)
incrementor()
incrementor()
println(incrementor())      

6、auto_closure

var closure1: @auto_closure () -> Int?      

= {return 3}()

var closure2: @auto_closure () -> Int = 3

closure1()

closure2()

7、struct哪行代碼出錯了

struct TestStruct1 {
    var test: String = "struct"
}

let struct1 = TestStruct1(test: "1111")
struct TestStruct2 {
    var test: String = "struct"
    init() {
        
    }
}
//compile error
let struct2 = TestStruct2(test: "2222")      

繼續閱讀