自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Swift社區(qū)調查:我們期待的 Swift 3.0 將會是什么樣?

移動開發(fā)
隨著諸如協議擴展、錯誤處理等 Swift 2.0 新引入的強大特性發(fā)布,這都意味著蘋果已經明確表示,它們非常積極地聽取來自開發(fā)者社區(qū)的意見來幫助完善和改進這門語言。我們調查了幾位使用 Swift 的開發(fā)者朋友,詢問他們對下一個版本的 Swift 有何希冀,因此他們將在類型系統(tǒng)、協議以及工具等方面和我們一起分享他們的想法。

[[155457]]

隨著諸如協議擴展、錯誤處理等 Swift 2.0 新引入的強大特性發(fā)布,這都意味著蘋果已經明確表示,它們非常積極地聽取來自開發(fā)者社區(qū)的意見來幫助完善和改進這門語言。我們調查了幾位使用 Swift 的開發(fā)者朋友,詢問他們對下一個版本的 Swift 有何希冀,因此他們將在類型系統(tǒng)、協議以及工具等方面和我們一起分享他們的想法。

 

Sash Zats

 

Labgoo、Wondermall 的 iOS 工程師、用戶體驗設計師及 API 架構師

類型化的錯誤

我***個期望就是類型化的錯誤(typed error),雖然這個想法還很不成熟,但是卻能給錯誤處理帶來極大地改善。Swift 2 引入了新的錯誤處理機制,但是遺憾的是,和語言中其他結構不同,錯誤結構并不是類型安全的。這樣做的好處就是錯誤處理成為了函數簽名(function signature)的一部分,比如說 do something() 和 do something() throws 的類型并不相同,前者無法代替后者來使用;壞處就是 dosomething() throws 無法指明它能夠拋出的錯誤類型(就像協議列表一樣:throws<IOTypes, NetworkingError>)。

 

依賴類型

 

我的第二個期望是提供“依賴類型”(dependent type)的支持。這個想法同樣仍未完全在我的腦海中成型,不過我確信它將給現有的類型系統(tǒng)中帶來全新的絕妙體驗!它將給值類型本身加入限制,類型系統(tǒng)的解析方式為:未定類型的數組 -> 字符串數組 -> 只含有2個元素的字符串數組。這對現有語言來說是一個極其有用的補充。下面的例子闡述了這個功能在什么地方比較有用:

  1. class Car { 
  2. var wheels: [Wheel]<4> = [Wheel(), Wheel()] 
  3. // 編譯錯誤,類型不匹配,需要 4 個Wheel 類型 

 

 

Cocoa 的 Swift 分支

 

***,我希望看到(不過很可能不會實現)Cocoa 的 Swift 分支版本。雖然 Cocoa 是一個很棒的框架集合,但是它自身攜帶的內容實在過于龐大,有可能會影響到 Swift 的開發(fā)方式。

我很想看到無需進行引用的結構體能夠普遍應用到新的分支上來(在我的想象中,我認為諸如 UIBarButtonItem、UINavigationItem 之類的類應該不需要讓你來累積它們的狀態(tài),因此它們可以被替換為結構體)。因此,我們就可以重新設計 API,盡可能地使用枚舉中關聯值的優(yōu)勢。在某些情況下,枚舉能夠更精確地描述其作用:例如 UIDatePicker 可以在一個屬性中使用關聯枚舉,來同時表示其日期值和創(chuàng)建值所使用的模式。

 

 

  1. class UIDatePicker { 
  2. enum Value { 
  3. case Date(date: NSDate) 
  4. case CountDownTimer(period: NSTimeInterval) 
  5. var value: Value? 

雖然這不大可能會發(fā)生,因為這種變化需要一個獨立的團隊為現有和新的 API 建立一個全新的版本,這個過程中需要耗費極大的努力。

我知道,我的這些想法和 Swift 團隊正面臨的實際問題和長期目標而言是非常的幼稚的,因為整個社區(qū)都知道他們所做的一切棒極了!

 

Jorge Ortiz

 

PoWWaU 創(chuàng)始人,移動開發(fā)開發(fā)者及教師

更好的輔助工具

我希望有一套比較成熟的輔助工具。比如說,我希望有一個我可以永遠信賴的調試器,而不是時不時出錯的玩意兒。這個調試器能夠在當前的堆棧幀顯示某個 符號的實際值。此外,我還希望有一個能夠對 Swift 進行重構的編輯器,就像在 Objective-C 中所做的那樣,這樣我就可以在它的幫助下改善我的代碼,比如說將一些語句提取到方法中,或者重命名項目中某個類或方法的名稱。

這個編輯器需要能夠生成代碼,將我從代碼套路中拯救出來(我的意思不是指代碼片段)。例如,如果編譯器發(fā)現我的類或者結構沒有完全實現某個協議,那么我希望有一個選項能夠讓編輯器自動將定義中所缺少的方法創(chuàng)建出來。

 

完善的測試

 

第二個愿望非常簡單,但是卻能夠讓進行測試的人們感到由衷的高興。我希望運行測試時無需使用模擬器,這樣能夠提升使用體驗。如果某個類只基于 Foundation,那么對其的測試應該可以無需模擬器就可以進行。這將減少需要運行的測試套件,使測試花費的時間更短。

 

內省機制

 

第三個愿望就涉及到語言本身了。我希望 Swift 擁有更好的內省(Introspection)能力,如果你愿意的話也可以稱之為反射(reflection)。此外,還希望其擁有更加動態(tài)化的調度機 制。沒有了這些特性,諸如 Mocking 框架之類的工具將無法被創(chuàng)建出來。

 

Sam Giddins

 

UChicago 2018. CocoaPods. Bundler.

高階泛型類型

首先我需要向大家道個歉,因為你可能會很反感我們這些驕傲的開發(fā)者需要向 Swift 團隊乞求我們所希望的 Swift 3 新特性。不過我覺得實現這個特性是最為重要的,因此無論怎樣我都在所不辭。

由于高階泛型類型(High-Kinded Type)是一個難以理解的東西,因此我打算用我們最喜歡的函數式編程比喻——卷餅,來為大家解釋。我們知道,我們可以用同樣的方式吃各種各樣的卷餅,無 論里面的內容如何,因為卷餅本身只是內部填充物的一個包裝而已。但是,如果我們有這樣一個方法告訴 Swift,“這里是一個對象,我唯一關心的事情只是它是一個卷餅,無論里面卷了牛排還是蔬菜還是蝦,我都只關心它是一個卷餅。”然而 Swift 并不能讓你輕易做到,如果你要吃某個卷餅的話,你首先需要這么做:“擁有相同填充物的卷餅是相同的”。這樣的話,你會發(fā)現你能使用的卷餅為數甚少……

我們勉為其難地說目前 Swift 的上層結構類型并不能讓我們這樣表示。并沒有任何辦法寫出關于 Monad 或者 Functor 的定義,這些定義可以用在該類型的所有實例當中,舉個例子,這意味著我們所添加的每個全新的 SequenceType,都必須表示為 S: Equatable when S.Element: Equatable 的形式。這讓代碼重復量十分可怕,這意味著我們不能將我們的真實目的編碼到類型系統(tǒng)中,導致我們程序員有更多犯錯和制造 bug 的情況發(fā)生。

 

Jacob Schwartz

 

Glint ***工程師

取消 Xcode 和 Swift 版本的關聯

我很高興能夠看到 Swift 語言演變至今,我認為它的團隊正在做一個十分了不起的工作,并且他們能預測到我們的需要,并且對大眾反饋做出反應。

對于 Swift 3.0 來說,我很希望能夠從不同版本的 Xcode 中使用這門語言。我并沒能夠完全深入地研究 Swift 2.0,因為它只能夠在 Xcode 7上面使用,而 Xcode 7 取消了支持 iOS7 。將 Xcode(以及 iOS SDK)和 Swift 版本關聯起來會造成不必要的惰性,阻礙開發(fā)者們遷移到新的語法當中。

所以不要讓我們難以取舍,讓我們在任何時候都能夠用上***的語言!

 

Viktor Belenyesi

 

Prezi *** iOS/Mac 開發(fā)者

擴展中的存儲屬性

就像 Scala 的特性一樣,如果我們能夠給既有類中通過擴展添加新的存儲屬性的話,這將會是巨大的改進。我們可以用 ObjC 運行時來實現此功能,但是這種代碼給我的感覺很不好,因為我每次都必須輸入這樣的鬼東西:

 

 

 

  1. extension UIView { 
  2. var myTag: String? { 
  3. get { 
  4. return objc_getAssociatedObject(self, "myTag") as? String 
  5. set(newValue) { 
  6. objc_setAssociatedObject(self, "myTag", newValue, UInt(OBJC_ASSOCIATION_RETAIN)) 
  7. Agnes Vasarhelyi 

Prezi iOS/Mac 開發(fā)者

自定義泛型類型中的協變機制

Swift 中內置的類型已經是協變(covariant)的了,但是當涉及到自己創(chuàng)建的 Party 的時候,一般情況下就必須要給來賓名單中加入不同的人,不然的話這個設計就是失敗的。

Sam Ritchie

 

CodeSplice***Codesplicer

 

約束泛型的協議一致性

 

Swift 擴展有兩個非常有用的功能,一個是能夠增加協議的一致性(protocol conformance),比如說在 Swift 1 中:

  1. extension String: JSONEncodable { 
  2. func toJSON() -> JSON { return .String(self) 
  3. }} 

另一個就是能夠給協議增加泛型約束(generic constraints),比如說在 Swift 2 中:

 

 

  1. extension Array where Element: JSONEncodable { 
  2. func toJSON() -> JSON { 
  3. return .Array(self.map { $0.toJSON() }) 

很遺憾的是,你不能將這兩者結合起來(即給約束泛型類型添加協議一致性),比如說:extension Array: JSONEncodable where Element: JSONEncodable 這種寫法是無法通過編譯的。這意味著如果你在嘗試使用“面向協議編程”的話,你不僅需要避免使用泛型,還要花費大量的時間和精力來寫重載函數。如果這項特性能夠在 Swift 3 中實現的話,那么我相信它能拯救很多代碼,讓協議以及泛型更加有用。

Itty Bitty Apps 以及 The CocoaBots 的***開發(fā)者

我對語言本身其實沒有太大的期望,不過如果能有類似 C# 之類的語言的異步風格函數(Async-Style Function)的話,那就再好不過了。不過我最想看到的還是更好的輔助工具。在 Xcode 中使用 Swift 仍然是一件很痛苦的事情,比如說我無法使用重構,這讓我感覺好像在使用幾十年前的 IDE一般。如果能有更好的工具,并且有更清晰的錯誤提示的話,那無疑再好不過了。

同樣我希望在明確需要使用 Optional.None 的地方讓nil被禁用掉,不過這聽起來像是我喝多了才會提出這個建議的。

說句實話,我并沒有實實在在地思考過 Swift 3.0 的模樣。標準庫就已經很好很簡潔了,如果它缺少什么東西的話,你實際上可以自己搭建出來。

 

Benji Encz

 

Make School 工程師,即將入職 PlanGrid

類型化的錯誤處理

我最想看到的就是函數可以拋出他們能夠產生的錯誤類型。目前蘋果的建議是在函數的文檔中寫出這些錯誤類型,但是如果編譯器也知曉這些錯誤類型的話那是不是 更好一些呢?這樣就可以實現一個精確的錯誤處理,而不是使用一個 catch-all 的錯誤捕獲。這同樣可以讓 API 中可產生錯誤的函數能更好地表述自己。

責任編輯:chenqingxiang 來源: oschina
相關推薦

2015-09-21 17:58:37

壁紙Ubuntulinux

2021-03-27 22:13:48

6G系統(tǒng)設備

2021-12-27 13:59:20

區(qū)塊鏈元宇宙技術

2022-11-18 10:17:10

2021-09-14 16:32:11

物聯網IOT

2022-04-08 09:59:03

物聯網2.0物聯網

2010-08-02 13:30:34

移動開發(fā)移動開發(fā)平臺

2013-11-29 10:17:49

5G4G網絡融合

2023-01-09 11:54:13

物聯網IOT

2012-10-09 09:45:43

數據庫實時大數據云計算

2022-05-30 18:54:12

元宇宙Web3數據量

2009-12-24 15:36:09

Linux操作系統(tǒng)

2019-02-25 19:35:30

5G數字時代透明

2013-09-26 10:38:15

喬布斯蘋果

2024-01-11 14:40:38

2021-05-08 13:11:58

物聯網IOT物聯網技術

2013-05-12 21:54:26

移動App設計iOS7

2017-02-28 16:58:46

移動支付2017

2014-07-17 10:12:58

Swift

2017-02-08 10:01:13

大數據ETL技術
點贊
收藏

51CTO技術棧公眾號