呃,為什么說(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)這里