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

时间:2017-10-11 07:57:23

标签: swift

为什么这段代码会给我上面的编译时错误?

var results = [[String:Bool]]()

var isSuccessful:Bool =
{
    for (index, element) in results.enumerated()
    {
        if element.values.contains(false) { return false }
    }
    return true
}

2 个答案:

答案 0 :(得分:1)

只需删除=标志

即可
var isSuccessful:Bool {
     get {
            for (index, element) in results.enumerated()
            {
                if element.values.contains(false) { return false }
            }
            return true
         }
    }

如果您使用=符号,则需要为变量“赋值”。 这是延迟var初始化的常见错误

lazy var isSuccessful:Bool =  {
            for (index, element) in results.enumerated()
            {
                if element.values.contains(false) { return false }
            }
            return true
    }()

当您第一次获得变量时,此语法将处理块。

答案 1 :(得分:1)

有两种情况。

1)计算属性:

var isSuccessful:Bool
{
    for (index, element) in results.enumerated()
    {
        if element.values.contains(false) { return false }
    }
    return true
}

2)懒惰变量:

lazy var isSuccessful : Bool = 
{
    for (index, element) in results.enumerated()
    {
        if element.values.contains(false) { return false }
    }
    return true
}()

两者都是正确的。选择你需要的那个。

语义:

  • 计算属性将在每次访问时进行评估。
  • lazy变量在首次访问时只评估一次,但在启动时不评估。