【问题标题】:Swift: Create mutable array with empty fieldsSwift:创建带有空字段的可变数组
【发布时间】:2014-07-30 15:22:03
【问题描述】:

我想在 Swift 中创建一个 UIImageView 类型的数组,但最初应该有一些空字段 (nil) 作为占位符。那可能吗?在 Objective-C 中很容易创建,例如:

[self.pageViews addObject:[NSNull null]]

在 Swift 中,我这样定义数组:

var pageViews:Array<UIImageView> = [];

override func viewDidLoad()
{
    super.viewDidLoad();

    for i in 0 ..< 5
    {
        pageViews.append(nil);
    }
}

这当然行不通。如果我用

定义数组
var pageViews:Array<UIImageView!> = [];

我不会收到编译时错误,但应用会抛出致命错误:

致命错误:尝试桥接包含 nil 的隐式展开的可选项

这个问题有什么好的解决方法吗?

【问题讨论】:

  • 在这个Array&lt;UIImageView!&gt;,这里的感叹号到底是做什么的?
  • 将 UIImageView 定义为可选。
  • @holex: UIImageView!UIImageView 的隐式解包选项
  • 最新的测试版无法重现这一点

标签: ios arrays cocoa-touch generics swift


【解决方案1】:

如果您希望能够将nil 存储在数组中,则必须将其类型定义为存储 Optional 值。为方便起见,您还可以使用 count:repeatedValue: 初始化程序:

var pageViews = [UIImageView?](count: 5, repeatedValue: nil)

【讨论】:

  • 但是隐式展开的可选也可以存储nil。问题在于桥接。
  • @user102008 是的,因为正如错误所说,您无法桥接包含nil 的隐式解包选项。如果他想桥接到 Objective-C(使用 UIImageView 需要),他必须使用普通的 Optional。
  • @drewag:当然,您可以桥接隐式展开的选项。它们被桥接到 Objective-C 对象指针类型。 nil 桥接到 nil 指针。它只是把它放在一个失败的NSArray 中。此外,相反,普通的 Optional 不能 桥接到 Objective-C。这就是您的代码有效的原因——通过防止数组被桥接到NSArray
猜你喜欢
  • 2021-09-23
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2014-07-28
  • 2015-12-16
  • 2010-10-25
相关资源
最近更新 更多