我使用的是Swift 4.1和Xcode 9.3。我想创建一个以Class或Struct为参数的函数。
代码示例:
func cast<T>(a: Any, b: T) {
let c = a as? b
if let c = c {
print("Good: \(c)")
} else {
print("Bad")
}
}
cast(a: 1, b: Int.self)
但这行中有错误:
let c = a as? b
错误:Use of undeclared type 'b'
我想像这样调用函数转换:cast(a: 1, b: Int)
或者像这样:cast(a: "a", b: String)
在泛型函数中传递类或结构作为参数的主要思想是正确的,如何做到这一点?
非常感谢您提供任何帮助或建议!
答案 0 :(得分:2)
您应该将属性转换为您已通过的类型
let c = a as? T
如果你想将一个类型传递给方法,你应该写T.Type
完整代码:
func cast<T>(a: Any, b: T.Type) {
let c = a as? T
if let c = c {
print("Good: \(c)")
} else {
print("Bad")
}
}
用法:
cast(a: 1, b: Int.self)
cast(a: "a", b: String.self)
运行这两行后,您将在控制台中看到:
Good: 1
Good: a