【发布时间】:2018-04-15 06:46:23
【问题描述】:
我正在使用 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)
在泛型函数中正确传递类或结构作为参数的主要思想,如何做到这一点?
非常感谢您的任何帮助或建议!
【问题讨论】:
-
当你可以简单地做
func foo<T>(a: T)时,为什么要投射,为什么要使用第二个参数? -
感谢您的回复。以强制转换为例,但是如何将 Int 作为参数传递?
-
我认为强制转换是为了检查:它是否完全是 Int。
-
当您致电
foo(a: 1)时,您可以确定 a 是 Int。同样,在foo(a: "bar")中,a 是字符串。无需检查。
标签: ios swift function generics swift4