[英]Swift type-variable to generic-type-variable
我得到的錯誤並不奇怪,但我將如何在 Swift 中完成這樣的事情?
let stringType = String.self
let stringArrayType = Array<String>.self
let stringArrayTypeFromVariable = Array<stringType>.self // Error :Use of undeclared type 'stringType'
我的最終目標是構建一個這樣的函數。
print( getTypeAsArray( Int.self ) ) // prints "Array<Int>.Type"
print( getTypeAsArray( String.self ) ) // prints "Array<String>.Type"
這是我目前的嘗試。 它不能編譯,但我認為這可能可以用這樣的泛型來解決。
// this version doesn't compile...
func getTypeAsArray<T>(_ value: T) -> [T].Type {
return []
}
getTypeAsArray(String.self)
// this version compiles, but doesn't give me the functionality I want...The expected output was Array<String>, not Array<String.Type>
func getTypeAsArray<T>(_ value: T) -> [T].Type {
return type(of: [])
}
getTypeAsArray(String.self) // -> Array<String.Type>
您可以通過執行以下操作來實現最終目標:
func getTypeAsArray<T>(_ value: T.Type) -> [T].Type {
return [T].self
}
但這在這樣的情況下不起作用:
let t: UIView.Type = UITableView.self
print(getTypeAsArray(t))
您希望它打印Array<UITableView>
,但它打印Array<UIView>
。
不幸的是,我認為您不能使上述案例也有效。 因為這樣的方法必須接受Any.Type
,但它的返回類型是什么? 它不能返回[Any].Type
因為雖然元類型是協變的,但元類型數組不是:
let t: [UIView].Type = [UITableView].self
錯誤:無法將類型
[UIView].Type
值轉換為指定類型[UITableView].Type
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.