无法转换类型'() - >的值_'指定类型' Town.Size'

时间:2016-04-12 16:35:40

标签: swift closures

在这个结构中遇到这个问题,在读取的行上 " lazy var townSize:Size = {"并且无法弄清问题是什么。

 # create test list
 temp <- list("v1"=list("A"=1:4,"B"=5:7,"C"=1:8), "v2"=list("A"=1:3,"B"=5:10,"C"=3:8))

 # get a list of zeros with the same dimension
 answer <- lapply(temp, function(x) sapply(x, function(y) rep(0, length(y))))

2 个答案:

答案 0 :(得分:11)

你错误地声明了lazy var它应该像这样声明

 lazy var townSize: Size = {
        switch self.population {
        case 0...10000:
            return Size.Small
        case 10001...100000:
            return Size.Medium
        default:
            return Size.Large
        }
    }()

答案 1 :(得分:10)

如前所述,要使用闭包初始化存储的属性,在结束括号之后需要()

lazy var townSize: Size = {
    switch self.population {
    case 0 ... 10000:
        return .Small
    case 10001 ... 100000:
        return .Medium
    default:
        return .Large
    }
}()

但是,因为population是一个变量,而不是一个常量,所以你根本不希望townSize成为一个存储属性。相反,您希望它是计算属性,以准确反映population

中的任何更改
var townSize: Size {
    switch population {
    case 0 ... 10000:
        return .Small
    case 10001 ... 100000:
        return .Medium
    default:
        return .Large
    }
}

请注意缺少=

如果您使用lazy存储的媒体资源,如果population在访问townSize后发生变化,则townSize不会相应地反映此情况。但是使用计算属性可以解决这个问题。