最近隨著蘋果的春季發(fā)布會(huì)到來,iOS9.3系統(tǒng)的更新隅俘,Swift2.2的更新也隨之到來邻奠,Swift自發(fā)行以來,就伴隨著很多評(píng)價(jià)为居,簡(jiǎn)介碌宴,方便開發(fā),完全免費(fèi)蒙畴,開源贰镣,綜合C呜象,OC,Java等多門語言的優(yōu)劣篩選產(chǎn)生的一門計(jì)算機(jī)語言碑隆。
如今Swift語言從發(fā)行至今也有近兩年時(shí)間恭陡,在兩年里也在不斷的完善,更新上煤,而且當(dāng)下也有不少軟件是通過純Swift語言來編寫的休玩,而且他有一個(gè)很大的好處就是開源,對(duì)于程序員來說這個(gè)好處絕對(duì)是最有誘惑力的劫狠,為什么git能有這么多程序員的支持拴疤,就是因?yàn)樗o了一個(gè)代碼平臺(tái),讓大家的代碼開源從別人那里學(xué)到知識(shí)独泞。同時(shí)它既嚴(yán)謹(jǐn)又開放呐矾,有自己的原則,同時(shí)使用起來也非常的靈活懦砂。
在這里我也是分享一下最近接觸并學(xué)習(xí)Swift語言的一些知識(shí)蜒犯。
先分享兩個(gè)好的學(xué)習(xí)網(wǎng)站慕課網(wǎng) 極客學(xué)院
首先說下Swift和OC的區(qū)別,在工程上OC是分為.h和.m文件的孕惜,一個(gè)聲明文件愧薛,一個(gè)實(shí)現(xiàn)文件,而在Swift工程中只有一個(gè)文件衫画,就是.Swift文件,聲明瓮栗,導(dǎo)入文件都在這一個(gè)文件夾里來操作的削罩。導(dǎo)入 不需要再到類名 所有類名都是公開的 可以直接訪問到
導(dǎo)入框架: 直接導(dǎo)入框架名 如 import UIKit
OC程序入口是main函數(shù)
swift代碼是從上往下執(zhí)行 @UIApplicationMain 程序的入口
class 是用來聲明類的 class后面是類名 冒號(hào)后面是繼承的父類
導(dǎo)入?yún)f(xié)議或者代理的時(shí)候直接在父類的后面加逗號(hào)和代理或協(xié)議的名字。
例如
class AppDelegate: UIResponder, UIApplicationDelegate{
}
另外如果我們要聲明一個(gè)變量费奸,在OC里面都是類名 對(duì)象名弥激,然后進(jìn)行復(fù)制,在Swift中所有的變量都用var來定義愿阐,所有的常量都用let定義微服,公式為
var 名字 :數(shù)據(jù)類型 =值
值得一提的是,Swift中是支持中文編碼格式的缨历,甚至你還可以把對(duì)象名命名為表情以蕴,比如
let ??:String = "hello world"
print(?? + "可以和海綿寶寶做朋友嗎")
//Swift中可以直接用+來拼接字符串
這就是說為什么這門語言很開放,但是我們?nèi)绻@樣寫
let ??:NSString = "hello world"
print(?? + "可以和海綿寶寶做朋友嗎")
他就會(huì)說辛孵,??的類型和"內(nèi)容"類型不同丛肮,不能進(jìn)行拼接,你必須把它轉(zhuǎn)化成String類型才能進(jìn)行拼接魄缚,在Swift中類型一定要精確宝与,否則他就會(huì)提示報(bào)錯(cuò)焚廊,而且,寫法一定要正規(guī)习劫,多一個(gè)空格少一個(gè)空格他都會(huì)給你莫名的報(bào)錯(cuò)咆瘟。
另外在Swift中一段代碼的結(jié)束可以不用;結(jié)尾,但是一行如果有多句代碼要用诽里;來隔開袒餐,其實(shí)加上也是不會(huì)報(bào)錯(cuò)的。
還有一點(diǎn)Swift因?yàn)楝F(xiàn)在還不算太完善须肆,如果你在聲明一個(gè)變量的時(shí)候匿乃,在后面并沒有改變他的值,他會(huì)提醒你豌汇,你可以賦值為常量幢炸,但是不要管他,也不會(huì)有錯(cuò)誤的拒贱。
在Swift中還有一點(diǎn)很神奇的地方就是宛徊,它可以自行推斷數(shù)據(jù)類型,這在其他所有語言中都是有違背常理的逻澳,一個(gè)數(shù)據(jù)的產(chǎn)生必定要隨之伴隨著他的類型闸天,但是在Swift中它卻可以自行推斷數(shù)據(jù)類型來進(jìn)行判斷,因?yàn)樵赟wift中加入了幾種新的判斷斜做,例如可選數(shù)據(jù)類型苞氮,明確數(shù)據(jù)類型,判斷數(shù)據(jù)類型瓤逼,就是說你在定義一個(gè)數(shù)據(jù)的時(shí)候他還沒有明確的去使用笼吟,也可以選擇它的數(shù)據(jù)類型,所以在這點(diǎn)Swift還是很嚴(yán)謹(jǐn)?shù)?/p>
let 字符串 = "我是字符串"
print(字符串)
let 年齡 = 12
print(年齡)
我們可以這樣證實(shí)一下是不是確實(shí)可以自行推斷數(shù)據(jù)類型
如果聲明變量的時(shí)候不想在聲明的時(shí)候去賦值 必須填上變量的數(shù)據(jù)類型 什么都沒給他 沒有推斷的依據(jù) 推斷不出
然后我們說一下Swift中方法的聲明和調(diào)用
就拿一個(gè)APPDelegate里面函數(shù)來說明吧
swift:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return true
}
OC:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
比較一下Swift里面聲明都是用func來聲明霸旗,后面是方法名贷帮,接著是一個(gè)小括號(hào),無參數(shù)就不填內(nèi)容诱告,有參數(shù)就填寫參數(shù)類型撵枢,順帶提一下Swift里面打mark標(biāo)記也不同,直接使用//MARK:標(biāo)題內(nèi)容來標(biāo)記精居,有一點(diǎn)锄禽,在Swift中是沒有BOOL類型的,他是純粹的Bool類型箱蟆,既沟绪,是或者非,沒有1空猜,0绽慈,YES NO這一說恨旱,所以return得都是true或者false
func 方法名 (){
print("無返回值不帶餐的函數(shù)")
}
//MARK:無返回值 代餐
func 有參方法(參數(shù)名:NSString) {
print("你好,我是有殘方法")
}
//MARK:帶參有返回值
func 有參有返回方法(參數(shù)名1:String , 參數(shù)名2:String) -> String {
return 參數(shù)名1 + 參數(shù)名2
}
無視那些賣萌的錯(cuò)別字=坝疼。=雖然可以用漢語搜贤,但是并不提倡這一點(diǎn),大家定義的時(shí)候盡量還是用英文命名钝凶。仪芒。逼格也高一些。耕陷。
然后在程序中調(diào)用一下掂名,調(diào)用的時(shí)候直接是方法名(參數(shù))
var 參數(shù):NSString = "??"
有參方法(參數(shù))
print(有參有返回方法("123", 參數(shù)名2:"12344" ))
要注意的是如果你要調(diào)用其他類的方法的時(shí)候要用.來調(diào)用,比如我創(chuàng)建一個(gè)UIView的類哟沫,在里面寫了個(gè)叫視圖方法的方法饺蔑,需要傳一個(gè)字符串的參數(shù)進(jìn)去,那么我調(diào)用的時(shí)候嗜诀。
//快捷創(chuàng)建對(duì)象
// 創(chuàng)建帶有frame的
// let view:MyView = MyView(frame:CGRectMake(123,123,123,123))
let view:MyView = MyView()
view.frame = CGRectMake(123, 123, 123, 123);
view.backgroundColor = UIColor .redColor()
print(view .視圖方法("字符串參數(shù)"))
self.view .addSubview(view)
還有一點(diǎn)猾警,在Swift中是提倡使用區(qū)間來定義范圍的,在Swift中有全閉合區(qū)間隆敢,和半閉合區(qū)間之分发皿,全閉合即包括區(qū)間內(nèi)所有元素,半閉合區(qū)間是由第一個(gè)元素到倒數(shù)第二個(gè)元素拂蝎。定義的方式也不同
1 2 3 4 5
全閉合區(qū)間 1...5//三個(gè)點(diǎn)
1 2 3 4 (5)
半閉合區(qū)間 1..5//兩個(gè)點(diǎn)
在Swift中是提倡使用區(qū)間來定義的
let titles = ["標(biāo)題1" , "標(biāo)題2" , "標(biāo)題3"]
for (var i = 0;i < titles.cout; i += 1){
vc.title = titles[i]
}
還有一點(diǎn)穴墅,Xode7.3之后 ++將在swift3中棄用 改成+=
在做數(shù)據(jù)類型轉(zhuǎn)換的時(shí)候
swift 不同的數(shù)據(jù)類型 不允許計(jì)算
數(shù)據(jù)類型轉(zhuǎn)換 數(shù)據(jù)類型(要轉(zhuǎn)換的變量名)
在遍歷的時(shí)候大家注意,這點(diǎn)我在學(xué)習(xí)的時(shí)候差點(diǎn)報(bào)警温自,在判斷的時(shí)候封救,比如i < 5,如果i和<中間有空格捣作,則右側(cè)也要有空格,如果沒有鹅士,就都不要有券躁,不然就會(huì)報(bào)錯(cuò),寫法一定要嚴(yán)謹(jǐn)掉盅,最好都加上空格也拜,看起來也清晰,另外for循環(huán)的條件可以不用加括號(hào)趾痘,當(dāng)然加上也沒有錯(cuò)誤慢哈,這點(diǎn)我當(dāng)時(shí)真的是要報(bào)警了
暫時(shí)先寫這么多,前面網(wǎng)站里面都會(huì)有相應(yīng)的視頻永票,老師也都很不錯(cuò)卵贱。在這里主要寫一些容易遇到的錯(cuò)誤等滥沫,有空再來寫一下選擇類型。