2016-04-21 63 views
3
class ClassA { 
    class ClassB { 
    } 
} 
let compiles: [ClassA.ClassB] 
let doesNotCompile = [ClassA.ClassB]() 

遊樂場執行失敗:MyPlayground.playground:109:22:錯誤:無效使用 '()' 調用非功能型 '[ClassA.ClassB.Type]' 的值 讓doesNotCompile = ClassA的的。 ClassB的 ^ ~~嵌套類型數組:爲什麼編譯器會投訴?

+0

看起來像一個錯誤。嘗試最新的Swift工具鏈或在http://bugs.swift.org提交錯誤。 – jtbandes

回答

3

正如你提到的,它的工作原理與此語法:

let arrayOfClassB: [ClassA.ClassB] = [] 

但如果我們聲明typealias[]()語法的工作原理:

typealias InnerClass = ClassA.ClassB 
let arrayOfAliasesOfClassB = [InnerClass]() 

所以我'd說這是一個錯誤,let arrayOfClassB = [ClassA.ClassB]()也應該工作,而不需要一個typealias。

更新:蘋果公司已經有an opened bug了。

+0

謝謝Eric。 – Verticon

-1

是編譯型ClassA.ClassB

數組在doesNotCompile您嘗試使用數組作爲函數。沒有你的意思是:

let doesNotCompile = ClassA.ClassB() 
+3

不,OP正試圖創建一個特定類型的空數組,他不是試圖創建ClassA或ClassB的實例 – luk2302

1

我不知道爲什麼簡寫語法不起作用的原因。但編譯器似乎喜歡擴展語法

let list = Array<ClassA.ClassB>() 
相關問題