【问题标题】:Return any type from a function in Swift从 Swift 中的函数返回任何类型
【发布时间】:2016-11-21 16:47:22
【问题描述】:

我正在尝试创建一个可以返回任何类型的函数。我确实希望它返回Any 类型的对象,而是其他类型的对象,即StringBoolInt 等。你明白了。

您可以通过这种方式使用泛型轻松做到这一点:

func example<T>(_ arg: T) -> T {
    // Stuff here
}

但是是否可以在不传入任何相同类型的参数的情况下做到这一点?这是我的想法:

func example<T>() -> T {
    // Stuff here
}

当我尝试这样做时,一切正常,直到我调用该函数,然后我收到此错误:

generic parameter 'T' could not be inferred

【问题讨论】:

    标签: swift function generics swift3 return-type


    【解决方案1】:

    是否可以在不传入任何相同类型的参数的情况下做到这一点?

    答案是肯定的,但是编译器需要有一种方法来推断泛型函数的正确版本。如果它知道将结果分配给什么,它将起作用。例如,您可以显式键入 letvar 声明。以下在 Swift 3 的操场上工作。

    protocol Fooable
    {
        init()
    }
    
    extension Int: Fooable {}
    extension String: Fooable {}
    
    func foo<T: Fooable>() -> T
    {
        return T()
    }
    
    let x: String = foo() // x is assigned the empty string
    let y: Int = foo()    // y is assigned 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2020-08-19
      • 1970-01-01
      相关资源
      最近更新 更多