簡體   English   中英

Swift 類型變量到泛型類型變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM