在惰性存储属性中使用函数时编译器错误

时间:2015-11-26 15:58:27

标签: swift lazy-evaluation swift2.1

我收到错误消息“"无法转换类型'字符串'参数类型'测试'"尝试从惰性存储属性中的函数返回值时。我无法在懒惰的var闭包中发现任何问题。

import UIKit

public struct Value {}

public class Test {

    var id: String = ""

    public func getValueById(id: String) -> Value {
        return Value()
    }

    public lazy var value: Value = {
        // Compiler error: Cannot convert value of 'String' to expected argument type 'Test'
        return getValueById(self.id)
    }() 
}

1 个答案:

答案 0 :(得分:2)

编译器对getValueById感到困惑,错误消息毫无意义 - 如果不是误导性的话。

您需要在封闭内的self前添加getValueById(self.id)

public struct Value {}

public class Test {

    var id: String = ""

    public func getValueById(id: String) -> Value {
        return Value()
    }

    public lazy var value: Value = {
        return self.getValueById(self.id)
    }() 
}
相关问题