错误无法调用类型&#39; Box <t>&#39;

时间:2015-04-22 14:17:22

标签: swift generics

为什么不允许这样做?

class Box<T>{
    let value: T
    init(_ value:T){
        self.value = value
    }

    func map<U>( f: T -> U)->Box<U>{
        return Box(f(self.value))
    }
}

return Box(f(self.value))处的错误:

  

错误:无法调用&#39; Box&lt; T&gt;&#39;类型的启动器使用类型&#39;(U)&#39;

的参数列表

1 个答案:

答案 0 :(得分:2)

您必须指定要返回的Box对象的类型:

class Box<T> {
    let value: T
    init(_ value:T){
        self.value = value
    }

    func map<U>(f: (T) -> (U)) -> Box<U> {
        return Box<U>(f(self.value))
    }
}

Box<T>类实现的上下文中,对Box的任何引用都假定为Box<T>,除非您明确指定类型(就像我对Box<U>所做的那样,在上面的return声明中。