Swift 學(xué)習(xí)總結(jié)(持續(xù)更新)

一健蕊,Swift 介紹

Swift 是一門由蘋果公司于2014年WWDC 蘋果開發(fā)者大會上發(fā)布的新的開發(fā)語言恰起,可與Objective-C*共同運(yùn)行于Mac OSiOS平臺燃少,用于搭建基于蘋果平臺的應(yīng)用程序终蒂。

其優(yōu)點(diǎn):Swift 有類似 Python 的易用性恬吕,又有較強(qiáng)的運(yùn)行效率签则。既有Objective C的運(yùn)行時(shí)動態(tài)支持,和基于編譯期引用計(jì)數(shù)的內(nèi)存管理模型铐料,又具備Ruby靈活優(yōu)雅的語法渐裂,C++的嚴(yán)格編譯期檢查、Javascript和Ruby的closure钠惩。Swift還支持與Objective C 混編柒凉,完美支持IOS/Mac 的SDK。

歷史版本:

Swift 4.1 is available as part of Xcode 9.3.

Swift 4.0.3

Swift 4.0.2

Swift 4.0

Swift 3.1.1

Swift 3.1

Swift 3.0.2

Swift 3.0.1

Swift 3.0

Swift 2.2.1

Swift 2.2

二篓跛,簡單示例代碼

print(“Hello, world!”)膝捞、

1,變量和常量

使用 let來聲明一個(gè)常量愧沟,用 var來聲明一個(gè)變量蔬咬。常量的值在編譯時(shí)并不要求已知,但是你必須為其賦值一次沐寺。這意味著你可以使用常量來給一個(gè)值命名林艘,然后一次定義多次使用。

var myVariable = 42

myVariable = 50

let myConstant = 42

2混坞,控制流

使用 if和 switch來做邏輯判斷狐援,使用 for-in, for究孕, while啥酱,以及 repeat-while來做循環(huán)。使用圓括號把條件或者循環(huán)變量括起來不再是強(qiáng)制的了蚊俺,不過仍舊需要使用花括號來括住代碼塊懈涛。

let individualScores = [75, 43, 103, 87, 12]
        
        var teamScore = 0
        
        for score in individualScores {
            
            if score>50{
                
                teamScore+=3
                
            }else{
                
                teamScore+=1
                
            }
            
        }
        
        print(teamScore)

3,函數(shù)和閉包

使用 func來聲明一個(gè)函數(shù)泳猬。通過在名字之后在圓括號內(nèi)添加一系列參數(shù)來調(diào)用這個(gè)方法。使用 ->來分隔形式參數(shù)名字類型和函數(shù)返回的類型宇植。

func greet(person: String, day: String) -> String {
        
        return"Hello\(person), today is\(day)."
        
    }

greet(person: “Bob”, day: “Tuesday”)

4得封,對象和類

通過在 class后接類名稱來創(chuàng)建一個(gè)類。在類里邊聲明屬性與聲明常量或者變量的方法是相同的指郁,唯一的區(qū)別的它們在類環(huán)境下忙上。同樣的,方法和函數(shù)的聲明也是相同的寫法闲坎。

class Shape {
    
    var numberOfSides = 0
    
    func simpleDescription()->String{
    
    return"A shape with\(numberOfSides)sides."
    
    }
}

5疫粥,枚舉和結(jié)構(gòu)體

使用 enum來創(chuàng)建枚舉茬斧,類似于類和其他所有的命名類型,枚舉也能夠包含方法梗逮。

enum Rank:Int {
    
    case ace = 1
    
    case two, three, four, five, six, seven, eight, nine, ten
    
    case jack, queen, king
    
    func simpleDescription()->String{
        
        switch self{
            
        case.ace:
            
            return"ace"
            
        case.jack:
            
            return"jack"
            
        case.queen:
            
            return"queen"
            
        case.king:
            
            return"king"
            
        default:
            
            return String(self.rawValue)
            
        }
        
    }
    
}

init() {
        
        let ace = Rank.ace
        
        let aceRawValue = ace.rawValue
    }

6项秉,協(xié)議和擴(kuò)展

使用 protocol來聲明協(xié)議。

protocol ExampleProtocol {
    
    var simpleDescription:String{get}
    
    func mutatingfuncadjust()
    
}

類慷彤,枚舉以及結(jié)構(gòu)體都兼容協(xié)議娄蔼。

protocol ExampleProtocol {
    
    var simpleDescription:String{get}
    
    func adjust()
    
}

class SimpleClass:ExampleProtocol {
    
    var simpleDescription:String="A very simple class."
    
    var anotherProperty:Int=69105
    
    func adjust(){
    
        simpleDescription += "  Now 100% adjusted."
    
    }
    
}

struct SimpleStructure: ExampleProtocol {
    
    var simpleDescription:String="A simple structure"
    
    func adjust(){
        
        // Left side of mutating operator isn't mutable: 'self' is immutable
    
    }
    
}

class test {
    
    init() {
        
        var a = SimpleClass()
        
        a.adjust()
        
        let aDescription = a.simpleDescription
        
        var b = SimpleStructure()
        
        b.adjust()
        
        let bDescription = b.simpleDescription
    }
    
    
}

7,錯(cuò)誤處理

你可以用任何遵循 Error協(xié)議的類型來表示錯(cuò)誤底哗。

enum PrinterError: Error {
    
    case outOfPaper
    
    case noToner
    
    case onFire
    
}

使用 throw來拋出一個(gè)錯(cuò)誤并且用 throws來標(biāo)記一個(gè)可以拋出錯(cuò)誤的函數(shù)岁诉。如果你在函數(shù)里拋出一個(gè)錯(cuò)誤,函數(shù)會立即返回并且調(diào)用函數(shù)的代碼會處理錯(cuò)誤跋选。

func send(job: Int, toPrinter printerName: String) throws -> String {
        
        if printerName == "Never Has Toner"{
            
            throw PrinterError.noToner
            
        }
        
        return"Job sent"
    }

有好幾種方法來處理錯(cuò)誤涕癣。一種是使用 do-catch。在 do代碼塊里前标,你用 try來在能拋出錯(cuò)誤的函數(shù)前標(biāo)記属划。在catch代碼塊,錯(cuò)誤會自動賦予名字 error候生,如果你不給定其他名字的話同眯。

do {

let printerResponse = try send(job:1040, toPrinter:"Bi Sheng")

print(printerResponse)

} catch {

print(error)

}

8,泛型

把名字寫在尖括號里來創(chuàng)建一個(gè)泛型方法或者類型唯鸭。

class Item {
    
    var a = "a"
    var b = "b"
}

func makeArray(repeating item: Item, numberOfTimes: Int) -> [Item] {

        var result = [Item]()

        //for _ in 0..

        result.append(item)

        return result

}
    
init() {
        var item = Item()
        makeArray(repeating:item, numberOfTimes:4)
 }

你可以從函數(shù)和方法同時(shí)還有類须蜗,枚舉以及結(jié)構(gòu)體創(chuàng)建泛型。

// Reimplement the Swift standard library’s optional type

enum OptionalValue {
        
        case none
        
        case some(Int)
        
}

init() {
    
        var possibleInteger: OptionalValue = .none
        
        possibleInteger = .some(100)
 }

在類型名稱后緊接 where來明確一系列需求——比如說目溉,判斷兩個(gè)數(shù)組中否包含有相同的對象(不是地址相等,是內(nèi)容相等

func anyCommonElements<T: Sequence, U: Sequence>(_ lhs: T, _ rhs: U) -> Bool
        where T.Iterator.Element: Equatable, T.Iterator.Element == U.Iterator.Element {
            for lhsItem in lhs {
                for rhsItem in rhs {
                    if lhsItem == rhsItem {
                        return true
                    }
                }
            }
            return false
    }


返回獲取相交的數(shù)據(jù)

func anyCommonElements<T: Sequence, U: Sequence >(_ lhs: T, _ rhs: U) -> Array<T.Iterator.Element>
        where T.Iterator.Element: Equatable, T.Iterator.Element == U.Iterator.Element{
            var array:[T.Iterator.Element] = Array()
            for lhsItem in lhs {
                for rhsItem in rhs {
                    if lhsItem == rhsItem {
                        array.append(lhsItem)
                    }
                }
            }
            return array
    }

三明肮、學(xué)習(xí)及參考資料

https://developer.apple.com/swift/resources/ // Xcode 9 + Swift 4 下載

1,Apple 官方Swift 學(xué)習(xí)指南(英文) The Swift Programming Language (Swift 4.1)

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-ID1

2缭付,一份翻譯比較完整的中文版Swift 學(xué)習(xí)指南

https://www.cnswift.org/

3柿估,Swift 評價(jià):

https://www.zhihu.com/question/24002984

4,一個(gè)Objective C 代碼 轉(zhuǎn) Swift 代碼的在線網(wǎng)站

https://objectivec2swift.com/#/converter/

其他參考及學(xué)習(xí)資料:

http://www.reibang.com/p/f35514ae9c1a

http://www.reibang.com/p/805be373eded

http://www.reibang.com/p/563738348597

https://swift.org/download/#releases

https://baike.baidu.com/item/SWIFT/14080957?fr=aladdin

http://www.reibang.com/p/69e257a29587?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

http://www.reibang.com/p/46c59c647b6e

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陷猫,一起剝皮案震驚了整個(gè)濱河市秫舌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绣檬,老刑警劉巖足陨,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異娇未,居然都是意外死亡墨缘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镊讼,“玉大人宽涌,你說我怎么就攤上這事〉澹” “怎么了卸亮?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嚼松。 經(jīng)常有香客問我嫡良,道長,這世上最難降的妖魔是什么献酗? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任寝受,我火速辦了婚禮,結(jié)果婚禮上罕偎,老公的妹妹穿的比我還像新娘很澄。我一直安慰自己,他們只是感情好颜及,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布甩苛。 她就那樣靜靜地躺著,像睡著了一般俏站。 火紅的嫁衣襯著肌膚如雪讯蒲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天肄扎,我揣著相機(jī)與錄音墨林,去河邊找鬼。 笑死犯祠,一個(gè)胖子當(dāng)著我的面吹牛旭等,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衡载,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼搔耕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痰娱?” 一聲冷哼從身側(cè)響起弃榨,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猜揪,沒想到半個(gè)月后惭墓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡而姐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了划咐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拴念。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钧萍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出政鼠,到底是詐尸還是另有隱情风瘦,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布公般,位于F島的核電站万搔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏官帘。R本人自食惡果不足惜瞬雹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刽虹。 院中可真熱鬧酗捌,春花似錦、人聲如沸涌哲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阀圾。三九已至哪廓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間初烘,已是汗流浹背涡真。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留账月,地道東北人综膀。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像局齿,于是被迫代替她去往敵國和親剧劝。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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

  • 一直沒有時(shí)間好好看一下swift抓歼,最近復(fù)習(xí)了一遍語法讥此,這里記錄swift學(xué)習(xí)過程中遇到的一些問題和要點(diǎn),和Obje...
    bomo閱讀 2,332評論 0 25
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,498評論 25 707
  • 有圖有真相↑ 有點(diǎn)粗淺的思維匯總,不建議參考蹋半。 期望它可以給大家一點(diǎn)好的認(rèn)知他巨。 我說的...
    進(jìn)擊的野蠻生長閱讀 428評論 0 0
  • 和你一樣,我們都是這世間最普通,又最唯一的小塵埃染突。寫這些東西的初衷只是想把它們記錄下來捻爷。也許文采并沒有斐然,也許盡...
    公子瀾卿閱讀 146評論 1 0
  • 學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的核心就是學(xué)習(xí)網(wǎng)絡(luò)協(xié)議份企。 1也榄,什么是網(wǎng)絡(luò)協(xié)議呢? 它是為了計(jì)算機(jī)網(wǎng)絡(luò)中的數(shù)據(jù)交換而建立的一系列規(guī)則司志,...
    凍桃花閱讀 375評論 0 0