首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么IBOutlets选拔赛在快速迁移5之后

为什么IBOutlets选拔赛在快速迁移5之后
EN

Stack Overflow用户
提问于 2019-03-29 17:40:48
回答 1查看 2.1K关注 0票数 6

在将项目迁移到swift 5之后,我得到了很多错误,例如

代码语言:javascript
复制
Expression implicitly coerced from 'UIButton?' to 'Any'

我不知道是什么导致了这一切。发生这种情况的一个例子(有一堆)是当我设置view.accessibilityElements时。数组应该包含:有吗.知道是什么导致的吗?

下面是一个示例:

代码语言:javascript
复制
@IBOutlet weak var shareButton: UIButton!
@IBOutlet weak var shareTitleLabel: UILabel!

view.accessibilityElements = [shareButton, shareTitleLabel]

下面是另一个例子:

代码语言:javascript
复制
@IBOutlet weak var titleLabel: UILabel!

let titleConstraints = [
        NSLayoutConstraint(item: titleLabel, attribute: .leading, relatedBy: .equal, toItem: otherView, attribute: .leading, multiplier: 1, constant: horizontalTextInset),
        NSLayoutConstraint(item: titleLabel, attribute: .trailing, relatedBy: .equal, toItem: otherView, attribute: .trailing, multiplier: 1, constant: -horizontalTextInset)
]

当像这样设置上面的元素时,它会导致上述错误。

EN

回答 1

Stack Overflow用户

发布于 2019-03-30 04:27:30

以下是几点意见:

  1. 实际上,造成这个问题的并不是迁移本身。问题很简单,您现在正在编译Swift 5,它现在警告您要注意模糊的强制。 由于您没有共享生成此警告的精确代码,请考虑生成该警告的示例: 类ViewController: UIViewController { @IBOutlet按钮: UIButton!重写func viewDidLoad() { super.viewDidLoad()让foo: Any =按钮打印(类型(of: foo)) //对foo }做一些事情 那么,看看这段代码,foo是可选的还是未包装的值?在Swift 5中,它用这个警告引起了我们的注意。 警告:从“UIButton?”中隐式胁迫的表达式?转到“任何”

它将向您展示消除这种模糊性的三种可能的自动修复方法,即:

代码语言:javascript
复制
- use `nil`-coalescing operator, `??`;
- force unwrap it, `!`; or
- just cast it with `as Any` to explicitly say that `foo` will be the optional with no unwrapping.

总之,我们希望能够轻松地对代码进行推理,而Any类型只会使这一点变得模糊。编译器不再假设您是否希望打开button,而是要求我们将我们的意图明确化。

  1. 为了便于比较,请考虑以下两种情况,其中没有歧义,因此也没有警告。例如,考虑到相同的隐式展开可选性,这里它知道隐式展开应该发生: 让foo: UIButton =按钮 在这里,它知道foo将是可选的: 让福: UIButton?=按钮
  2. 如果您想知道为什么您的隐式解包UIButton!插座被看作是UIButton? (而不是作为ImplicitlyUnwrappedOptional类型,或者即使使用Any类型也会自动强制展开),那么在隐式解包装选项的重新实现SE-0054废除ImplicitlyUnwrappedOptional型中有一些有趣的讨论。
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55422914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档