繁体   English   中英

无法将类型'()-> _'的值转换为指定的类型'布尔'

[英]Cannot convert value of type '() -> _' to specified type 'Bool'

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

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

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

只需删除=符号

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)计算属性:

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
}()

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

语义上:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM