当前位置: 首页 > 知识库问答 >
问题:

swift 3.0.2 给出了雄心勃勃的错误“'bool'类型被破坏了”

岳浩穰
2023-03-14

我使用这个结构,使用这个

struct Ride {
  var isRideForNow: Bool!    
}
 var sheduleRide: Ride?
 sheduleRide = Ride()
 sheduleRide?.isRideForNow = false

当我这样使用它工作正常

 if (sheduleRide?.isRideForNow)! {
   //some code
 }

但我不知道为什么下面的代码给出错误“类型'bool'被破坏了”,即使里面没有可选的链接

 if (sheduleRide!.isRideForNow) {
   //some code
 }

共有2个答案

子车俊哲
2023-03-14

明确使用yvar!而使用是我工作的方式

施俊哲
2023-03-14

这是一个无用的错误消息 - 它似乎只存在于 Swift 版本 3.0 到 3.0.2 中。问题在于 Swift 并没有隐式地解开可选函数,因为它认为您正在尝试执行可选检查。

因此,解决方案,正如@vacawama所说,是简单地显式打开可选:

if sheduleRide!.isRideForNow! {
    // some code
}

(如果调度isRideForNow,当然会崩溃。)

然而,在我看来,Swift在这里没有隐式展开IUO的事实不符合SE-0054中详述的IUO行为,因为iuo应被视为强选项,可以像它们一样进行类型检查,否则应被隐式展开。

在布尔条件下,编译器无法将表达式的类型检查作为强可选项,因此实际上应该隐式展开。此行为作为错误提交,并在该拉取请求中修复,因此声明:

if sheduleRide!.isRideForNow {
    // some code
}

现在在Swift 3.1中编译良好。

但实际上,正如@vadian所说,你应该考虑isRideForNow是否应该是一个IUO。只有当它需要延迟初始化时(否则不能
懒惰),才应该使它成为一个。

如果您在初始化时给它一个值,那么它可能是非可选的:

struct Ride {
    var isRideForNow: Bool
}

var sheduleRide = Ride(isRideForNow: false)

 类似资料:
  • 问题内容: 当我尝试创建此错误时出现: 错误(E_UNKNOWN)::遇到意外错误MongoError:Server.insert(/ Users / oscargallon / Documents / developer / sails / reyesmagoswebpae / node_modules / sails- mongo / node_modules / mongodb / node

  • 我在使用Lombok的注释时遇到了问题,因为jar似乎还没有被导入到project中: 上面写着: 无法解析方法信息(java.lang.String) 编译时: 错误:(6,1)java:package-org。slf4j不存在 我做到了: 将lombok的依赖项插入pom 我在这里寻找解决方案: Lombok补充道,但Intellij IDEA中没有认可的能手和二传手 在IntelliJ ID

  • 演示 该网站最初有一些有限的文本,和大量复杂的图形,并在所有5个浏览器上呈现良好。我添加了更多的文本,但现在在Safari中无法使用。我认为转换可能更糟--试着缩放jsfiddle,您会看到人工制品的出现和消失取决于缩放。 有什么想法吗?Safari是不是刚刚坏了?

  • 我试图根据用户使用calandar类输入的日期来确定一天是否是周末。但是当我打印出当天的值时,我得到了不正确的输出。 这是我的代码: 但是输出

  • 我正试图使Filepond工作,但CSS中的这一行似乎破坏了它-在ul选择器中。 我试着对页面的整个部分进行核化,直到Filepond起作用,将目标锁定在css上,最后在ul{}中找到前面提到的行。我可以把其他的东西都抹掉,只留下那条线,而文件孔仍然坏了,所以我肯定这是问题所在,但我不知道是怎么回事。 我尝试使用Chrome的检查器功能查看运行时页面源代码,但在那里找不到溢出。 然后我使用Note

  • 问题内容: 我有一个用Restify和Mongoose在node.js中构建的REST服务,以及一个mongoDB,它的集合包含大约30.000个常规大小的文档。我的节点服务通过pmx和pm2运行。 昨天,节点突然开始通过消息“ MongoError:拓扑已被破坏”消除错误,仅此而已。我不知道这是什么意思,可能触发了什么。谷歌搜索时也没有太多发现。所以我想在这里问。 今天重新启动了节点服务后,错误