談?wù)凷wift3.0(一)

引言

Apple與今年6月13日正式發(fā)布了Swift3.0的第一個預(yù)覽版本胰耗,并且相應(yīng)推出了Xcode8的第一個bate版本。開發(fā)者已經(jīng)可以在Xcode8bate版上來體驗Swift3.0的新特性吏廉。首先,Swift3.0確實帶來了很大改變,許多Swift中的結(jié)構(gòu)體API都進行了更新,例如String雹嗦,Array等,Swift3.0版本將許多類Objective-C風(fēng)格的API都更換成了Swift風(fēng)格的合是,其目的使開發(fā)者可以使用Swift更加愜意有趣的編程了罪。本系列博客,是我觀看WWDC視頻中介紹的內(nèi)容以及Swift3.0的開發(fā)者幫助文檔整理總結(jié)而來聪全,在期間泊藕,我也參考對比了Swift2.2中的實現(xiàn)方式,希望可以幫助需要的朋友盡快熟悉和上手Swift3.0难礼。

API變化

  • 去掉i++ ++i i-- --i語法,開發(fā)者可以用i+=1 i-=1代替娃圆。

  • for循環(huán):

*** 摒棄C風(fēng)格的for循環(huán):***

for (var i = 0; i < 10; i++){print)(i)} 

*** 常用的for循環(huán)寫法:***

//[1-10]
for (i in 1...10) {print(i)}
//[1,10)
for (i in 1...<10) {print(i)}
//[10, 1]
for (i in 1...10).reversed() {print(i)}
//(10, 1]
for (i in 1...<10).reversed() {print(i)}

*** 用stride關(guān)鍵字描述for循環(huán)(by的意思是步長): ***



// 從0到10 步長為2玫锋,to是開區(qū)間,不包括10踊餐,所以控制臺打印 0 2 4 6 8 
for i in stride(from:0, to:10, by:2){print(i)}

// 從0到10 步長為2景醇,through是閉區(qū)間,包括10吝岭,所以控制臺打印 0 2 4 6 8 10
for i in stride(from:0, through:10, by:2){print(i)}

// 從10到0步長為0.1
for i in stride(from:10, through:0, by:0.1){print(i)}

// 從10.5到0步長為0.1
for i in stride(from:10.5, through:0, by:0.1){print(i)}
  • 元組
    *** 元組(tuples)把多個值組合成一個復(fù)合值三痰。元組內(nèi)的值可以使任意類型,并不要求是相同類型 ***
// httpError 的類型是 (Int, String),值是 (404, "Not Found")
let httpError = (404, "Not Found")

// 把元組的內(nèi)容分解成單獨的常量和變量
let (name, age) = ("wang", 3)
print("The name is \(name)") // 打印wang

// 如果你只需要一部分元組值,分解的時候可以把要忽略的部分用下劃線(_)標記:
let (name, _) = ("wang", 3)
print("The name is \(name)") // 打印wang

// 定義元組給每個元素單獨起名字:
let person = (name:"wang", age:3)
print("The name is \(person.name)") // 打印wang

*** 元組取值方式 ***

let person = ("wang", 3)
print("The name is \(person.1)") // 打印3

let person = (name:"wang", age:3)
print("The name is \(person.name)") // 打印wang

*** 元組的比較***

// 通過下面兩組比較不難發(fā)現(xiàn),元組是通過維度來比較值的窜管。例如:如果Math的值不相等散劫,則score0與score1的比較結(jié)果是依據(jù)Math的值決定的;如果Math的值相等幕帆,則score0與score1的比較結(jié)果是依據(jù)English的值決定的获搏。多個維度的也是按照此方式進行比較的,大家可以嘗試一下失乾。
  //1.第1組:
    let score0 = (Math:100, English:100)
    let score1 = (Math:99, English:100)
    print(score0 == score1) // 打印false
    print(score0 > score1) // 打印true

  //2.第2組:
    let score0 = (Math:100, English:99)
    let score1 = (Math:100, English:100)
    print(score0 == score1) // 打印false
    print(score0 > score1) // 打印false
    print(score0 < score1) // 打印true

// 元組運算符的重載機制常熙。那什么時候需要這個重載呢?例如:我想拿出元組中English的值來衡量score0和score1的大小碱茁,而不是按照從左到右的維度來比較裸卫。
    let score0 = (Math:1, English:100)
    let score1 = (Math:89, English:100)
    // 在Swift中運算符本質(zhì)上是函數(shù)
    func <(s1:(Int, Int), s2:(Int, Int)) ->Bool {
        if s1.1 != s2.1 {
            return s1.0 < s2.0
        }
        return s1.1 < s2.1
    }
    print(score0 < score1) // 打印false

// 元組函數(shù)傳值
   func printScore(Math:Int, English:Int) {
      print("The Math Score is\(Math), The English Score is\(English)")
   }

  //在Swift2.0中是這樣調(diào)用的:
  printScore(score0)
  // 在Swift3.0中是這樣調(diào)用的:
  printScore(score0.Math, score0.English)
  • Selector語法

想必有過OC開發(fā)經(jīng)驗的同學(xué)應(yīng)該都會知道selector的含義是啥吧,這里不再贅述

Swift3.0可以在playground中直接支持顯示和操作界面

使用之前需要import PlaygroudSupport纽竣,不然沒法使用墓贿。
點擊View-Assistant Editor-show Assisitant Editor調(diào)出UI界面

Snip20170131_3.png

Snip20170131_2.png

貼代碼:

class ViewController:UIViewController{
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.white
        let btn = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        btn.setTitle("haha", for: UIControlState.normal);
        btn.backgroundColor = UIColor.blue
       //這個#selector()是Swift3.0新的寫法,寫錯或者不實現(xiàn)方法都會報錯提示蜓氨,比起Swift2輸入字符串的方式更加智能聋袋。
        btn.addTarget(self, action: #selector(click), for: UIControlEvents.touchUpInside)
        self.view.addSubview(btn)
    }
    func click(button:UIButton) {
        if button.backgroundColor == UIColor.blue {
            button.backgroundColor = UIColor.red
        } else {
            button.backgroundColor = UIColor.blue
        }
    }
}
var vc = ViewController()
vc.view.frame = CGRect(x: 0, y: 0, width: 320, height: 480)
PlaygroundPage.current.liveView = vc.view

參考資料

https://developer.apple.com/swift/resources/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市穴吹,隨后出現(xiàn)的幾起案子幽勒,更是在濱河造成了極大的恐慌,老刑警劉巖刀荒,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件代嗤,死亡現(xiàn)場離奇詭異,居然都是意外死亡缠借,警方通過查閱死者的電腦和手機干毅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泼返,“玉大人硝逢,你說我怎么就攤上這事。” “怎么了渠鸽?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵叫乌,是天一觀的道長。 經(jīng)常有香客問我徽缚,道長憨奸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任凿试,我火速辦了婚禮排宰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘那婉。我一直安慰自己板甘,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布详炬。 她就那樣靜靜地躺著盐类,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呛谜。 梳的紋絲不亂的頭發(fā)上在跳,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音隐岛,去河邊找鬼硬毕。 笑死,一個胖子當(dāng)著我的面吹牛礼仗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逻悠,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼元践,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了童谒?” 一聲冷哼從身側(cè)響起单旁,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饥伊,沒想到半個月后象浑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡琅豆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年愉豺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茫因。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚪拦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驰贷,我是刑警寧澤盛嘿,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站括袒,受9級特大地震影響次兆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锹锰,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一芥炭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧城须,春花似錦蚤认、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至良瞧,卻和暖如春陪汽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背褥蚯。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工挚冤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赞庶。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓训挡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歧强。 傳聞我的和親對象是個殘疾皇子澜薄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 因為要結(jié)局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細...
    uniapp閱讀 4,407評論 0 12
  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多,會對里面所有的內(nèi)容的引用計數(shù)+1摊册,想要解決就用__block...
    炙冰閱讀 2,477評論 1 14
  • 寫這篇文章的時候肤京,我輾轉(zhuǎn)了很久該不該寫,后來還是決定要寫茅特,原因竟然是因為一個同學(xué)最后沒能下定決心要離開自己不喜歡...
    澤西_閱讀 249評論 0 0
  • 2017年5月16日 星期一 中雨 晚上晨睿說她昨天忘分、前天的計算題沒做,加上今天的白修,一共要...
    A小青竹閱讀 204評論 0 0
  • 我畏懼且羨慕那些喜歡讀詩的人妒峦。我喜歡買詩集,卻不曾讀過完整一本兵睛,面對躺在書架上的詩舟山,我是心懷愧疚的绸狐,但面...
    查拉圖王子不曰閱讀 308評論 0 0