swift-基礎-基本語法1

  • 創(chuàng)建對象: '
    • OC: alloc / initWithXXX
    • Swift: (XXX:)
  • 調方法
    • OC [UIColor redColor];
    • Swift: UIColor.redColor()
  • 枚舉:
    • OC: UIButtonTypeContactAdd
    • Swift: UIButtonType.ContactAdd
  • 創(chuàng)建結構體:
    • OC CGPointMake()
    • Swift : CGPoint()

常量和變量

  • 以前在OC中的數據類型首字母要大寫肮街,比如Int/Float
  • 常量用let风题,注意只能初始化一次
  • Swift中盡量推薦用let,只有需要修改變量的時候才用var
let num : Int
num = 33
let num2 : Int = 44
  • 變量用var
var value : Double
value = 22.3
var value2 : Double = 33.33
  • 自動類型推導:如果在定義的同時初始化,那么可以不用寫數據類型沛硅,編譯器會根據內容自動推導出當前的數據類型:var num = 22.3
  • 數據類型轉換:必須手動顯式轉換.Swift中永遠不會自動轉換(強語言)眼刃。CGFloat和Double之間也必須轉換
var n1 = 10.1
var n2 = 10
var sum = n1 + n2 // 這么寫是錯的,OC中會隱式轉換摇肌,Swift中不會
var sum = n1 + Double(n2) // 必須這么寫

分支

  • if:swift中可以省略if后面的圓括號擂红。OC中如果大括號中只有一條語句,可以省略大括號围小,swift中不行
let num = 10
if num == 10
{
    print("num是10")
}
  • Swift中提供了真正的BOOL類型:true/false昵骤。if后面的條件表達式必須是true/false。用到這里肯适,最直接的改變以前的if (num) {}這么寫是錯的了
  • switch:同樣可以省略switch后面的圓括號变秦。可以不用寫break
  • switch在OC中想在case后面定義變量框舔,必須加大括號蹦玫,而swift中不需要
  • switch在OC中defult可以隨便放在哪里,或者不用謝雨饺,swift中必須放在最后一條钳垮,而且大部分情況下必須寫

三目運算符

  • 注意運算符之間需要有空格惑淳。大括號如果不換行额港,前面也要有空格
let num = 10
let res = (num == 10) ? 10 : 5

可選類型Optional ? 歧焦!看到問號或者感嘆號那么說明是可選類型

  • 含義:可以有值移斩,也可以沒有值。只有可選類型才可以賦值nil
  • alt+單擊該變量绢馍,可以發(fā)現(xiàn)它的類型后面有個問號? 所以如果一個變量如果點開看沒有問號向瓷,那么表示它一定有值
  • 如果打印這個類型,那么會在前面自動加個Optional
  • 如果不想要Optional舰涌,可以在變量后面加個!,代表告訴系統(tǒng)該變量一定有值猖任,就不會加Optional(稱為強制解包)注意如果對nil執(zhí)行了強制解包,那么會引發(fā)運行時錯誤
let url = NSURL(string:"[http://www.520it.com")](http://www.520it.com"))
print(url)
print(url!)
let url1 = NSURL(string:"[http://www.520it.com/哈哈")](http://www.520it.com"))
print(url!)// 此處會崩瓷耙,因為url1后面有中文朱躺,導致url1為nil,對nil強制解包會崩
  • 所以一般在強制解包前作個判斷是否為空if url != nil

可選綁定

  • 每次強制解包前還要作判斷搁痛,太麻煩长搀,所以swift提供了可選綁定
  • 格式:
let url = NSURL(string:"[http://www.520it.com/哈哈")](http://www.520it.com"))
if url2 = url{    print(url2) // 這里不會打印,因為url為nil鸡典,上面的if會過濾掉
}
let url3 = NSURL(string:"[http://www.520it.com")](http://www.520it.com"))
if url4 = url{    print(url2) // 這里會打印源请,而且不帶Optional,系統(tǒng)會自動解包
}
  • 開發(fā)技巧:初學者不用去糾結問號感嘆號

guard守護

  • 可先綁定寫得多了,會導致判斷太多(if套if)可讀性差谁尸。用guard來解決這個問題:判斷條件如果為假舅踪,那么執(zhí)行大括號里的,否則繼續(xù)往下走
  • 大多數情況用可選綁定症汹,但是注意如果就算有空值硫朦,仍希望代碼繼續(xù)往下走的,要用可選綁定(if完了后面再跟if背镇,不是嵌套)
guard 判斷條件 else{
    return
}
  • 注意guard大括號里必須要有return或者continue
guard let url2 = url else{
    print("url2為空")
    return
}
// 能來到這里說明url2肯定有值
print(url2)

自動解包

  • 直接這么寫會報錯:因為數據類型不對咬展,前面的變量url是NSURL?類型的
let url : NSURL = NSURL(string:"[http://www.520it.com")](http://www.520it.com"))
  • 必須這么寫:
let url1 : NSURL? = NSURL(string:"[http://www.520it.com")](http://www.520it.com"))
let url2 : NSURL! = NSURL(string:"[http://www.520it.com")](http://www.520it.com"))
let url3 : NSURL = NSURL(string:"[http://www.520it.com")](http://www.520it.com"))!
  • 如果數據類型后面帶了感嘆號了,那么在使用該變量時會自動解包瞒斩。而問號則不會破婆。比如上面打印url2和url3不會帶Optional
  • 但是,注意變量后面別隨便帶感嘆號胸囱,因為如果變量為nil祷舀,就會報錯

?烹笔?判斷

  • 用于判斷前面的可選類型的參數是否是nil裳扯,如果是nil就返回后面的值
        // 這里str是個可選類型
        let str: String? = nil
        // result不是可選類型(經過?谤职?判斷之后饰豺,肯定有值)

        let result = str ?? "123"

        print(result)

斷言

  • 用于判斷某個變量是否為空,如果為空允蜈,那么直接程序崩潰并且打印信息
        assert(access_token != nil, "使用loadUserInfo()方法前必須先授權")

        assert(uid != nil, "使用loadUserInfo()方法前必須先授權")

        let params = ["access_token": access_token!,

                      "uid": uid!]

where

  • 相當于并且冤吨,寫在可選綁定后面。在這里可以拿到本句代碼中定義的常量饶套。(用&&拿不到)
            if let sourceStr: NSString = status?.source where sourceStr != ""

            {

                let startIndex = sourceStr.rangeOfString(">").location + 1

                let length = sourceStr.rangeOfString("<", options: NSStringCompareOptions.BackwardsSearch).location - startIndex

                let rest = sourceStr.substringWithRange(NSMakeRange(startIndex, length))

                sourceLabel.text = "來自\(rest)"

            }

循環(huán)

  • 常規(guī)寫法:可以省略圓括號漩蟆。注意空格不要少
for var i = 0;i < 10;i ++ 
{
    print(i)
}
for item in ["1","2","3"]
{
    print(item)
}
  • swift特有寫法:其中0..<10稱之為半閉區(qū)間。
    • 半閉區(qū)間:不包含頭妓蛮,包含尾
    • 閉區(qū)間:0...10包含頭尾
    • 注意...之間不能有空格
for i in 0..<10 // 倒過來就是從后往前遍歷
{
    print(i)
}
  • while:Swift中很少用while循環(huán)
var index = 0
while index < 10
{
    print(index)
    index ++
}
  • do while -->repeat while

數組

  • let代表不可變數組怠李,var代表可變數組
  • 前面不需要加@,會自動把基本數據類型轉換成對象蛤克,不需要包裝`var array = [10捺癞,"哈哈",9.9];
  • 定義:var array:[String]? // 定義一個內容為string類型的數組咖耘,并且沒有初始化加個問號
  • 獲取:print(array[1])
  • 修改:array[1] = @"呵呵"
  • 追加:array.append(33) 數組每次加內容翘簇,容量不夠的話,每次會翻倍
  • 刪除:array.removeAtIndex(0)// 這個刪除方法會這個刪除的元素返回給我們
    • 刪除所有array.removeAll()
    • 刪除所有但保存原有容量array.removeAll(keepCapacity:true).靈活使用可以節(jié)省性能
  • 合并:注意要相同類型才能合并
var array1 = [1,2,3]
var array2 = [4,5,6]
var array2 = ["4","5","6"]
array1 += array2 // 這樣就完成了合并
  • 排序
// 讓數組按照item的attribute屬性來排序
array = array!.sort({ (item1, item2) -> Bool in

            return item1.attribute > item2.attribute

        })
  • 遍歷:見上面for循環(huán)

字典

  • OC:@{key : value}
  • Swift:[key : value]
  • 同樣儿倒,let和var代表不可變和可變字典
// 定義方法1:定義的同時賦值
let dict1 = ["name" : "lhj","age" : 29]
// 定義方法2:定義指明類型版保,再賦值
let dict2:[String:AnyObject]
dict2 = ["name" : "lhj","age" : 29]
  • 上面[String:AnyObject]類型是Swift中用的最多的字典類型呜笑,意思就是key是String類型的,value為任意對象
  • 獲瘸估纭:print(dict["name"])
    • 注意:取出來的都是可選類型的值叫胁,因為根據這個key取值可能會取不到,返回的值可能是nil
    • 可以在[]后面加個嘆號汞幢,代表取出來的一定有值print(dict["name"]!)
  • 更新:dict["name"] = "zhangsan"
  • 添加:dict["weight"] = 100
  • 遍歷
for key in dict.keys
{
    print(key)
}
// Swift特有方法驼鹅,會將字典中的key賦值給for后面的括號中的第一個變量,將value賦值給第二個變量(括號中的變量稱之為元祖)
for (k,v) in dict
{
    print(k)
    print(v)
}
  • 合并 :字典不能像數組那樣+=來合并森篷,只能遍歷再一個個賦值输钩。同樣注意類型需一致
var dict1:[String:AnyObject] = ["name" : "lhj","age" : 29]
var dict2:[String:AnyObject] = ["score" : 99]
for (k,v) in dict1
{
    dict2[k] = v
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仲智,隨后出現(xiàn)的幾起案子买乃,更是在濱河造成了極大的恐慌,老刑警劉巖钓辆,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剪验,死亡現(xiàn)場離奇詭異,居然都是意外死亡前联,警方通過查閱死者的電腦和手機功戚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來似嗤,“玉大人啸臀,你說我怎么就攤上這事∷唬” “怎么了壳咕?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵席揽,是天一觀的道長顽馋。 經常有香客問我,道長幌羞,這世上最難降的妖魔是什么寸谜? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮属桦,結果婚禮上熊痴,老公的妹妹穿的比我還像新娘。我一直安慰自己聂宾,他們只是感情好果善,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著系谐,像睡著了一般巾陕。 火紅的嫁衣襯著肌膚如雪讨跟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天鄙煤,我揣著相機與錄音晾匠,去河邊找鬼。 笑死梯刚,一個胖子當著我的面吹牛凉馆,可吹牛的內容都是我干的。 我是一名探鬼主播亡资,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼澜共,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锥腻?” 一聲冷哼從身側響起咳胃,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎旷太,沒想到半個月后展懈,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡供璧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年存崖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睡毒。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡来惧,死狀恐怖,靈堂內的尸體忽然破棺而出演顾,到底是詐尸還是另有隱情供搀,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布钠至,位于F島的核電站葛虐,受9級特大地震影響,放射性物質發(fā)生泄漏棉钧。R本人自食惡果不足惜屿脐,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宪卿。 院中可真熱鬧的诵,春花似錦、人聲如沸佑钾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽休溶。三九已至代赁,卻和暖如春撒遣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背管跺。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工义黎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人豁跑。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓廉涕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親艇拍。 傳聞我的和親對象是個殘疾皇子狐蜕,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容