国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從Java到Swift

lemon / 1076人閱讀

摘要:函數(shù)的定義形如函數(shù)可以返回多個返回值,這個功能真是太猛了。支持函數(shù)類型,根據(jù)輸入?yún)?shù)和返回值確定一個函數(shù)類型。例如函數(shù)的參數(shù)可以另外一個函數(shù),注意,不是另外一個函數(shù)的返回值,而是另外一個函數(shù),只要類型符合即可。

我們學(xué)習(xí)的新事物時,通常并不是從0開始,而是從已知開始,將新事物與已知的進(jìn)行比較分析,從而快速全面地了解新事物。
而我熟悉Java,所以在學(xué)習(xí)Swift時,就會將Swift與Java進(jìn)行比較,思考。(文中的示例代碼均來自The Swift Programming Language:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/index.html?spm=5176.blog7567.yqblogcon1.6.ac0bvH#//apple_ref/doc/uid/TP40014097-CH3-ID0)

概覽

從Java到Swift還是比較簡單的,相比Object-C,Swift和Java的語法更加接近,和最近的Kotlin就更像了。Swift同時支持面向?qū)ο缶幊毯秃瘮?shù)式編程。Swift比Java功能更加強(qiáng)大,用法更加友好。網(wǎng)上有一份Java和Swift的粗略對比:

基礎(chǔ)部分

1.Swift沒有main函數(shù),這個有點(diǎn)像腳本語言。Swift程序的默認(rèn)入口是main.swift文件,在iOS應(yīng)用中,則通常標(biāo)記了@UIApplicationMain的AppDelegate.swift文件。可以類比到Android中,在AndroidManifest.xml中定義的Application。
2.Swift不需要定義行結(jié)束符,這個是像腳本語言一樣。
3.Swift使用var定義變量,一般無需指定具體的數(shù)據(jù)類型,編譯器會自行判斷。遇到編譯器無法判斷的情況,需要自己顯式指定。

4.Swift用let定義常量,Java里面是static final。
5.array跟Java中的array是一樣的概念。dictionary就是Java中的map。dictionary的取值的方式是dictionary[key],接口就像array一樣,簡潔方便。
6.nil在swift中就類似Java中的null。nil是沒有初始化成功,是沒有值。
7.optional value是指該value的值可以是nil,Swift默認(rèn)一個var是不能賦值nil,除非它聲明了optional。optional不能直接輸出,而必須unwrap,形如optionalValue!。有點(diǎn)類似于Java中打包好的null判斷。也可以用!代替?聲明一個無需unwrap的var。

邏輯控制

1.Swift的switch 語法和Java及C++很像,但是它沒有break,他命中一個case后會自動退出switch。對于幾個不同case同樣處理的情況,可以case后面連續(xù)幾個condition,用逗號隔開。

2.Swift的switch支持運(yùn)算,運(yùn)算的話,就是說不僅僅是equal,而是支持滿足特定要求。

3.while循環(huán)和Java或者C++中基本一致,不過while后面直接寫condition,不需要用括號。
4.for循環(huán)和Java也基本一樣,不過也是不需要括號。for循環(huán)中,..<的用法比較方便。同時還支持_通配符,有點(diǎn)類似與Java中for
each循環(huán)。

函數(shù)

1.函數(shù)的定義和Java很不一樣。Swift函數(shù)的定義形如 func functionName(argName: Type) -> Return Type:

2.Swift函數(shù)可以返回多個返回值,這個功能真是太猛了。

3.Swift函數(shù)可以接收不定參數(shù),跟Java基本類似的用法。

4.函數(shù)可以嵌套,這個是Java或者C++都沒有的,挺好用。例如經(jīng)常有一段邏輯,用一個函數(shù)實(shí)現(xiàn)太長,在Java或者C++中,通常是會把它拆分成幾個函數(shù),保持每個函數(shù)短小,功能單一。但是這樣拆分的函數(shù)并不能很好的表明他們是一個功能的,不夠“內(nèi)聚”。用這種Swift函數(shù)嵌套的方式就能較好實(shí)現(xiàn)。

5.Swift支持函數(shù)類型,根據(jù)輸入?yún)?shù)和返回值確定一個函數(shù)類型。函數(shù)類型可以讓函數(shù)像,普通數(shù)據(jù)類型一樣使用。例如函數(shù)的參數(shù)可以另外一個函數(shù),注意,不是另外一個函數(shù)的返回值,而是另外一個函數(shù),只要類型符合即可。這個相當(dāng)于是函數(shù)級別的多態(tài),真的有點(diǎn)猛。

6.Swift支持閉包,我覺得可以理解成“匿名函數(shù)”,只需要描述輸入輸出,用in分開輸入輸出描述,已經(jīng)函數(shù)體,無需定義函數(shù)名。

類與結(jié)構(gòu)

1.類的構(gòu)造函數(shù),直接叫init()。類函數(shù)調(diào)用跟Java,C++基本一樣。self相當(dāng)于Java中的this。
2.在Swift中class的成員訪問權(quán)限控制級別有public, internal, private對應(yīng)Java中的public, protected, private。
3.deinit是析構(gòu)函數(shù)。Java中也有finalize()函數(shù)。不過Java的finalize()函數(shù)并不確保一定被調(diào)用,所以并不推薦override該函數(shù)。
4.類的繼承跟C++有點(diǎn)像,使用:。

5.他的setter和getter函數(shù)跟Java不太一樣,是隱式調(diào)用的。我覺得Swift的設(shè)計(jì)思想是,用戶只需關(guān)心輸入和輸出,其他的不用關(guān)心。例如此處只需關(guān)心需要set或者get。具體的set和get函數(shù)則是封裝的,無需使用者去關(guān)心。又譬如上面提到的method的type,只要定義了輸入和輸出,就定義了一類method,那就可以對這種type有多種具體實(shí)現(xiàn)。

6.Swift的枚舉和Java類似,本質(zhì)是一個類,里面可以包含函數(shù)。
7.Swift的struct和class寫法基本一樣,區(qū)別在于struct傳遞的是內(nèi)容的copy,而class傳遞的是引用。這個厲害啊。

8.枚舉還支持associated value,這個是Java沒有的。

9.protocol類似于Java中的interface。
10.extension比較強(qiáng)大,甚至{{BANNED}},可以動態(tài)往某個類中增添函數(shù)以及成員變量,動態(tài)讓某個類實(shí)現(xiàn)某個protocol,而無需修改該類源代碼。Java新增成員變量,新增函數(shù),實(shí)現(xiàn)某個interface,Java都只能通過繼承實(shí)現(xiàn)。而這個直接實(shí)現(xiàn),且對一切該類的對象生效,包括extend之前已經(jīng)創(chuàng)建的對象。

11.Swift泛型和Java類似的,Swift的泛型支持where語句,可以在對類型控制之外,作更加精細(xì)的控制。

內(nèi)存管理

Swift和Java類似,也無需自己管理內(nèi)存,Swift是由ARC(Automatic Reference Counting)機(jī)制來回收內(nèi)存的,Java是有垃圾回收機(jī)制來保證內(nèi)存被及時回收。但是兩者的回收機(jī)制有所區(qū)別。我的理解是Swift的ARC機(jī)制著眼于無效的對象,就是那些沒有被任何人引用到的對象。因此,如果兩個對象循環(huán)引用,就會無法被回收,引起泄露。此時就需要Weak Reference或者Unowned Reference來打破這個環(huán)。
而Java的垃圾回收機(jī)制,從反面思考,著眼于哪些是有效的對象,即有被GC Root引用到的對象是有效的,其他的都是無效的。因此哪怕有對象相互引用,只要沒有被GC Root引用到,都會被垃圾回收器回收掉。從這此處來看,Java的策略更優(yōu)。也由此可以看到換個角度看問題是多么重要。

參考引用

The Swift Programming Language (Swift 2.1)
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/index.html#//apple_ref/doc/uid/TP40014097-CH3-ID0
what is the entry point of swift code execution? http://stackoverflow.com/questions/24105690/what-is-the-entry-point-of-swift-code-execution
Swift程序入口深度分析 http://00red.com/blog/2014/11/20/swift-main-study/
Swift 函數(shù)式編程實(shí)踐 http://codebuild.me/2015/09/15/swift-functional-programming-intro/
Java vs Swift http://slidenerd.com/2014/11/15/swift-vs-java/
SwiftGuide https://github.com/ipader/SwiftGuide
Swift https://developer.apple.com/swift/
Learn the Essentials of Swift https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson1.html
What is an “unwrapped value” in Swift? http://stackoverflow.com/questions/24034483/what-is-an-unwrapped-value-in-swift
自動引用計(jì)數(shù) https://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapter2/16_Automatic_Reference_Counting.html

關(guān)于阿里百川
阿里百川(baichuan.taobao.com)是阿里巴巴集團(tuán)“云”+“端”的核心戰(zhàn)略是阿里巴巴集團(tuán)無線開放平臺,基于世界級的后端服務(wù)和成熟的商業(yè)組件,通過“技術(shù)、商業(yè)及大數(shù)據(jù)”的開放,為移動創(chuàng)業(yè)者提供可快速搭建App、商業(yè)化APP并提升用戶體驗(yàn)的解決方案;同時提供多元化的創(chuàng)業(yè)服務(wù)-物理空間、孵化運(yùn)營、創(chuàng)業(yè)投資等,為移動創(chuàng)業(yè)者提供全面保障。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65574.html

相關(guān)文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<