標籤:blog http 使用 os strong 檔案
1、如果我是個剛入門的iOS開發人員,選swift學習呢,還是選objective-c學習,還是兩個都學?
這個可以根據兩種情況來決定:1、我想進入公司擔任iOS開發的職位 2、我只想做個獨立開發人員,自己開發app發布。
第一種情況的話,你必須要學objective-c,現在市面上絕大部分的app都是用oc開發的,從oc到swift過渡是要很長一段時間的。
當然swift最好也同時要學會。
第二種情況:你不考慮相容性(iOS7以下版本,後面會提到)的情況下,完全可以只學習swift。不過objective-c第三方開源庫非常的豐富,有時間,最好還是要學習瞭解oc。
隨著時間的推移,肯定是轉向swift的。
2、 我有多年的iOS Objective-C的開發經驗,對應swift,我還是新手嗎?
在我看來,你不是新手了。因為你很熟悉Xcode和Cocoa/Cocoa Touch API 。熟悉和學習這些API和工具過程比學Swift花的時間更長。
只要花點時間熟悉使用Swift文法,
就能很快的在項目中使用swift了。
3、iOS 8和OS X Yosemite的應用程式只使用Swift語言嗎?不是。Swift語言能與Objective-C流暢地互動,反之亦然。蘋果並沒有完全將Objective-C 的API轉成Swift,但你仍可以在Swift代碼中仍使用這些API。時間會證明,很多年內iOS和OS X商店在採用Swift語言的同時仍會繼續依賴Objective-C語言。
4、Swift語言適用於iOS的其他版本和OS X系統嗎?
是的!Xcode 6可以為iOS 7及以上和OS X10.9及以上的系統版本編譯Swift代碼。其實,現在你從App Store下載的WWDC app就是蘋果用Swift語言編寫的。
但是,蘋果現在還不允許使用Xcode Beta版本建立的應用程式提交到App Store。因此,你需要等到Xcode 6正式版發布才能在App Store中上傳Swift編寫的應用程式。
5、Swift語言是取代Objective-C,還是只是對Objective-C的補充?
引用蘋果官方的一句話,“Objective-C不會消失,Swift和Objective-C可同時用於Cocoa和CocoaTouch開發。”因此,你仍然可以繼續使用Objective-C。不過,蘋果似乎鼓勵你使用Swift進行新的開發,而不是希望你重寫所有的Objective-C代碼。我們猜測蘋果在未來的架構和API開發中將會逐漸減少使用Objective-C語言,甚至有一天會棄用Objective-C,所以早作準備吧!
6、playground是什麼?
playground只是一個檔案,你可以編寫代碼的同時即刻看到運行效果。對於學習Swift或者新的API、原型代碼或者演算法真的很有用處!
參考11條,你就知道怎麼建立和運行playground了。
7、如何學習Swift?
蘋果官方的教程 Swift Programming book
官方教程的中文翻譯:http://numbbbbb.gitbooks.io/-the-swift-programming-language-/
這是我見過翻譯最快的教程!翻譯的又快又好。
WWDC 2014的Swift視頻
8、有沒有在Swift語言可以實現,但Objective-C下卻不能實現的事情?或者反過來說。有的。Swift是一門現代語言,引入了很多Objective-C不支援的內容。比如命名空間(namspacing)、可選類型(optionals)、元組(tuples)、泛型(generics),類型推斷(type inference)以及其他等等。當然,Objective-C也有一些Swift不具備的特性,比如messaging nil.
想瞭解更多細節,建議在讀完本文後閱讀下蘋果的官方文檔: Using Swift with Cocoa and Objective-C Guide (這裡有 中文版 )
9、有沒有Swift不能用的API?在寫這篇文章時,我還沒發現有。
10、Playground中,println()結果在哪裡?如果你開啟了playground,還是看不見結果,那就執行那麼的操作:
開啟Assistant Editor才能看到控制台輸出。步驟:View > Assistant Editor > Show Assistant Editor,
或者使用快速鍵: Option + Command + Return.
11、怎樣在開啟Playgrounds和看到那些很酷的值的圖形?
兩種方式開啟Playgrounds:建立Playgrounds項目或在已有的項目裡建立檔案,選擇playgrounds檔案。
咱們看一段簡單的代碼,一個for迴圈,
for x in 1..10 { x }
下面是對應的playgrounds的
12、你如何運行REPL?
在終端運行以下命令,告訴它使用Xcode 6的命令列工具。
sudo xcode-select -s /Applications/Xcode6-Beta.app/Contents/Developer/
然後運行以下代碼開始Swift REPL。
xcrun swift
如果準備退出,你可以鍵入:exit或者:quit。你也可以使用CTRL+D快速鍵。
12、你能用Swift來調用自己的Objective-C代碼或者第三方庫嗎?如果能,要怎麼做呢?
可以!當你往Xcode項目裡添加第一個.swift檔案時,系統會提示你讓Xcode建立一個橋接標頭檔(bridging header file)。你可以在這個標頭檔中匯入你希望可見於Swift代碼的Objective-C標頭檔。然後,所有的類無需匯入都可為Swift所用,你可以使用和系統類別相同的Swift文法來使用自訂Objective-C代碼。
13、數組能包不同的類型呢?
在Swift中,強烈建議使用只包含一種類型的強型別數組,比如:
var goodArray: String[] = [ "foo" , "bar" ]
從技術上講,你可以建立包含多個類型對象的數組。但最好問問自己為什麼這麼做。多類型數組:
var brokenArray: AnyObject[] = [ "foo" , 1, 12.23, true ]
14、字典(dictionary)和原來一樣嗎?字典也是強型別(strongly typed)的嗎?
是的,不過你依然可以用AnyObject來解決。對於字典來說,它裡邊所有的值不是同一個類型也講得通。以下是用字典表示的從伺服器端返回的一個JSON響應:
來看一個伺服器JSON響應的例子,用字典來表示:
var employee : Dictionary<String, AnyObject> = [ "FirstName" : "Larry" , "LastName" : "Rodgers" , "Salary" : 65_000.00]
這個字典有兩個String類型的鍵和一個Double實值型別的鍵。直接是字典也是可以的,不過你最好建立一級類模型對象來表示這些資料,而不是依賴字典。
15、Swift如何和Grand Central Dispatch一起使用?
同樣的方法,你可以像在Objective-C中那樣使用C API.在處理並發性時,你也可以使用蘋果進階NSOperationQueue。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {println( "test" )});
16、Objective-C中的國際化宏命令呢?
類似Objective-C中的NSLocalizedString,
你可以在Swift中使用NSLocalizedString(key:tableName:bundle:value:comment:) 方法為國際化做準備
。tableName、bundle以及value arguments都有預設值,所以如果你正使用NSLocalizedString,你可以編寫如下代碼:
NSLocalizedString("Hello", comment: "standard greeting")
17、swift我需要考慮循環參考嗎?
當然需要考慮!當兩個對象彼此之間是強引用時,仍能建立一個retain cycle。你可以使用Objective-C中一樣的方法break這個retain cycle。有三個關鍵字用於聲明參考型別,詳情如下,弱引用和無主引用將解決你的引用生命週期問題。
何時使用強引用、弱引用以及無主引用呢?
強引用:強引用會使得ARC保留執行個體直到不再需要它們。當移除所有強引用時,引用執行個體就會被釋放。注意預設情況下強引用是隱式的, 所以你不必顯式地聲明它。
弱引用:你應該在獨立生命週期的對象間使用弱引用。當為一個對象設定弱引用時,如果出於記憶體壓力釋放了對象,表示你不介意這一點。弱引用的值必須是一個變數,使用var定義 ,並且必須是使用?運算子的Optional類型。由於弱引用是可選的,所以你決不能以一個已經不存在的無效執行個體的引用來結束。當引用執行個體被釋放時,ARC將會自動把引用設 置為nil。
無主引用:你應該為有相同生命週期的對象使用無主引用;比如當一個對象指向其自身,以及你希望避免一個retain cycle。無論何時只要引用有一個值就可以使用無主引用,但當你需要告訴ARC不要將它設定為nil時。無主引用的行為類似於Objective-C的unsafe_unretained。你要確保你不會在引用對象被釋放後訪問引用,這樣會導致你的 app崩潰。無主引用不能是可選的,不能被設定為nil。無主引用也是隱式解析。
18、如何使用分號
分號在Swift中是可選的,不過出於易讀性的目的,蘋果建議你不要再使用分號了。但有時候仍會在Swift中使用分號,比如在迴圈語句中。
for var index = 0; index < 3; ++index { ... }
19、swift的接下來會怎樣發展呢?
現在的swift只是第一個版本,蘋果公司的目的非常明確,他們會迭代更新語言。所以你發現swift的bug,可以向蘋果報告,或者要求增加一些新特性。
在該版本正式發布之前,仍有很大的提升空間。
20、CocoaPods怎麼適用於swift項目嗎?
Swift項目仍然是Xcode項目,並且支援多個target,但是有提升建立模組和自訂架構能力的潛在空間。有可能會重新改寫CocoaPods以適應這個新特性。
有人使用CocoaPods協助Swift項目工作:https://medium.com/swift-programming/cocoapods-with-swift-e6f8ba8f0afc,而且機智的CocoaPods開發人員 已經在討論這個問題了:here:https://github.com/CocoaPods/CocoaPods/issues/2218 。
說明:
本文主要參考的文章是:http://www.raywenderlich.com/74138/swift-language-faq
不過我不會逐字翻譯,我在參考原文的基礎上,加入了自己的想法,簡單扼要的寫下問題和回答。