重拾Swift第一天 基礎(chǔ)語(yǔ)法

呃,為什么說(shuō)是重拾呢,其實(shí)很早之前就接觸過(guò)Swift,但是那時(shí)候還是1.x的版本,就記得!和?滿(mǎn)天飛,看了下語(yǔ)法寫(xiě)了小項(xiàng)目,結(jié)果頭昏腦漲,又轉(zhuǎn)回OC了。

前幾天忽然看到google考慮把Swift應(yīng)用于開(kāi)發(fā)安卓,不管是不是謠言吧,起碼Swift發(fā)展速度相當(dāng)之快,于是決定把Swift重新?lián)炱饋?lái)。

今天看了看基礎(chǔ)語(yǔ)法,和記憶中差別還是挺大的。順手寫(xiě)了個(gè)小項(xiàng)目,功能很簡(jiǎn)單,輸入數(shù)字排序,可以快速排序也可以冒泡排序,一邊結(jié)合項(xiàng)目一邊熟悉語(yǔ)法吧。
編寫(xiě)時(shí)很多還是OC的思維,慢慢轉(zhuǎn)變吧。
首先看下基本結(jié)構(gòu)


首頁(yè)是個(gè)UITableViewController,兩個(gè)cell,快速排序和冒泡排序,點(diǎn)擊cell進(jìn)入DetailController,輸入數(shù)字按排序按鈕進(jìn)行排序。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier)
    if cell == nil
    {
        cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: reuseIdentifier)
    }
    let str=dataArray[indexPath.row]
    cell?.textLabel?.text=str
    return cell!
}

首先我們看這一段代碼,基本都能看出來(lái)就是創(chuàng)建cell的方法
在Swift中,常量用let,變量用var
cell最后為什么有個(gè)!號(hào)呢,這涉及到Swift中可選類(lèi)型的概念。
使用可選類(lèi)型(optionals)來(lái)處理值可能缺失的情況。可選類(lèi)型表示:

  • 有值,等于 x
    或者
  • 沒(méi)有值

其實(shí)很容易理解,一個(gè)對(duì)象可能因?yàn)榉N種原因沒(méi)有創(chuàng)建成功或者沒(méi)值,就是nil,OC中向nil發(fā)送消息不會(huì)報(bào)錯(cuò),但這也不是我們希望看到的。Swift中的可選表示它可能有值也可能沒(méi)值,我們既然都要return一個(gè)cell顯示出來(lái),那么cell應(yīng)該有值,所以我們用!告訴編譯器這個(gè)cell一定有值,稱(chēng)之為強(qiáng)制解析

  lazy var dataArray:[String]={
    return ["快速排序","冒泡排序"]
  }()

OC里有懶加載的概念,Swift中也有。
Swift中懶加載的關(guān)鍵字是lazy,非常直觀(guān)好記,但這里有個(gè)注意點(diǎn),你必須使用var關(guān)鍵字來(lái)定義延遲加載的屬性,不能使用let關(guān)鍵字,因?yàn)槌A勘仨氃趯?shí)例構(gòu)建時(shí)賦值。
后面則是一個(gè)閉包,相當(dāng)于block。閉包比較復(fù)雜,可以學(xué)習(xí)一下
閉包
反正這里的意思就是返回一個(gè)數(shù)組。

 /**
 選擇排序要使用的方法
 
 - parameter title: 控制器標(biāo)題
 */
func chooseSortFunction(title:String){
    switch title{
    case "快速排序":
        sortManager.quickSort(&numbers, left: 0, right: numbers.count-1)
    case "冒泡排序":
        sortManager.bubbleSort(&numbers)
    default:
        print("other")
    }
}

這里注意一點(diǎn),當(dāng)匹配的 case 分支中的代碼執(zhí)行完畢后,程序會(huì)終止switch語(yǔ)句,而不會(huì)繼續(xù)執(zhí)行下一個(gè) case 分支。

/**
 快速排序算法
 
 - parameter numbers: 數(shù)組
 - parameter left:    左標(biāo)
 - parameter right:   右標(biāo)
 */
func quickSort(inout numbers:[Int],left:Int,right:Int)
{

如果你想要一個(gè)函數(shù)可以修改參數(shù)的值,并且想要在這些修改在函數(shù)調(diào)用結(jié)束后仍然存在,那么就應(yīng)該把這個(gè)參數(shù)定義為輸入輸出參數(shù)。
定義一個(gè)輸入輸出參數(shù)時(shí),在參數(shù)定義前加 inout
關(guān)鍵字。
大概注意點(diǎn)就是那么多了
代碼參見(jiàn)這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,342評(píng)論 4 61
  • Swift 介紹 簡(jiǎn)介 Swift 語(yǔ)言由蘋(píng)果公司在 2014 年推出,用來(lái)撰寫(xiě) OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,428評(píng)論 3 25
  • 回家看到了兩個(gè)妹妹給爸媽買(mǎi)的按摩椅和足療機(jī)。媽媽讓我趕緊體驗(yàn)一下足療,十五分鐘。又讓我去按摩兩個(gè)回合...
    心有佳期閱讀 338評(píng)論 0 0
  • 《稀缺》[美]塞德希爾·穆來(lái)納森 埃爾德·沙菲爾 是不是感覺(jué)自己每天忙得要死依舊很窮哪?自己是否...
    橙宇晴閱讀 177評(píng)論 0 0
  • 每個(gè)人身邊兒都會(huì)有喜歡抱怨的人,我身邊兒有,不多卻出奇的矯情,我稱(chēng)其為偽‘圣人’,在他們眼中除了自己近乎完美之外,...
    940d5c7f45f7閱讀 1,066評(píng)論 0 2

友情鏈接更多精彩內(nèi)容