如何在函数中传递任何类或结构作为参数?

时间:2018-04-15 06:46:24

标签: ios swift function generics swift4

我使用的是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) 在泛型函数中传递类或结构作为参数的主要思想是正确的,如何做到这一点? 非常感谢您提供任何帮助或建议!

1 个答案:

答案 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