【问题标题】:Clean up code? (Xcode freezes at indexing)清理代码? (Xcode 在索引时冻结)
【发布时间】:2016-06-16 11:46:42
【问题描述】:

我相信我必须稍微清理一下我的代码,因为 Xcode 第一次开始在“索引”处冻结,我无法运行我的项目。我认为这很容易做到,但我不知道哪种方法是最好的。获得 36 个 UIImageViews...

@IBOutlet var Image1: UIImageView!
@IBOutlet var Image2: UIImageView!
@IBOutlet var Image3: UIImageView!
@IBOutlet var Image4: UIImageView!
@IBOutlet var Image5: UIImageView!
@IBOutlet var Image6: UIImageView!
@IBOutlet var Image7: UIImageView!
@IBOutlet var Image8: UIImageView!
@IBOutlet var Image9: UIImageView!
@IBOutlet var Image10: UIImageView!
@IBOutlet var Image11: UIImageView!
@IBOutlet var Image12: UIImageView!
@IBOutlet var Image13: UIImageView!
@IBOutlet var Image14: UIImageView!
@IBOutlet var Image15: UIImageView!
@IBOutlet var Image16: UIImageView!
@IBOutlet var Image17: UIImageView!
@IBOutlet var Image18: UIImageView!
@IBOutlet var Image19: UIImageView!
@IBOutlet var Image20: UIImageView!
@IBOutlet var Image21: UIImageView!
@IBOutlet var Image22: UIImageView!
@IBOutlet var Image23: UIImageView!
@IBOutlet var Image24: UIImageView!
@IBOutlet var Image25: UIImageView!
@IBOutlet var Image26: UIImageView!
@IBOutlet var Image27: UIImageView!
@IBOutlet var Image28: UIImageView!
@IBOutlet var Image29: UIImageView!
@IBOutlet var Image30: UIImageView!
@IBOutlet var Image31: UIImageView!
@IBOutlet var Image32: UIImageView!
@IBOutlet var Image33: UIImageView!
@IBOutlet var Image34: UIImageView!
@IBOutlet var Image35: UIImageView!
@IBOutlet var Image36: UIImageView!


override func viewDidLoad() {

    let images = (1...6).map { UIImage(named: "Owl\($0)") }
    let imageViewsArray = [Image1, Image2, Image3, Image4, Image5, Image6, Image7, Image8, Image9, Image10, Image11, Image12, Image13, Image14, Image15, Image16, Image17, Image18, Image19, Image20, Image21, Image22, Image23, Image24, Image25, Image26, Image27, Image28, Image29, Image30, Image31, Image32, Image33, Image34, Image35, Image36]
    for view in imageViewsArray {
        let randomIndex = Int(arc4random_uniform(UInt32(images.count)))
            view.image = images[randomIndex]
    }

}

我可以为所有 36 个图像一起制作一个 IBOutlet 吗?还是这样的? :-)

ViewDidLoad()here中的代码信息。

【问题讨论】:

  • 我严重怀疑你必须在这里使用 UICollectionView 或 UITableView 来减少代码..this。删除派生数据(窗口-> 项目)并重新启动 xCode。之后应该可以正常工作。
  • @FruitAddict 谢谢!但我不知道如何将代码更改为 UICollectionView :-)
  • 好吧,如果您在屏幕上显示 36 张图像,它们必须以某种形式的网格或列表排列。您可以用这些图像填​​充 36 个单元格,而不是拖动 36 个插座,这样代码就更清晰和可扩展了。
  • @FruitAddict 正如你在我的代码中看到的那样,我很糟糕。所以我必须给出一个具体的例子才能理解,对不起,伙计..
  • 查找UICollectionView,很简单。

标签: ios swift uiimageview code-cleanup


【解决方案1】:

正如@FruitAddict 所说,UICollectionView 可能很有用,当然这取决于您要显示的内容。但如果它不符合您的需求,您仍然可以使用 Outlet 连接而不是插座:

因此,您可以直接从 labelCollection 访问每个标签,这是一个显式展开的 UILabel 数组。

此外,在 gif 中,通过将第二个标签拖动到现有的插座,将第二个标签添加到集合插座。出口不会被替换(就像在常规对象中一样),而是将新标签添加到数组中。

编辑:

正如@nhgrif 指出的那样,不要依赖出口集合中对象的顺序:

请务必注意,虽然很多时候 outlet 集合中的顺序可能与您拖入它们的顺序不谋而合,但 Apple 对此不作任何保证,并且不应依赖该集合中的顺序。

您应该将此数组视为一个集合。

【讨论】:

  • 请务必注意,虽然很多时候 outlet 集合中的顺序可能与您拖入它们的顺序不谋而合,但 Apple 对此不做任何保证,并且不应依赖集合中的顺序.
  • 不错的补充,我刚加了。
猜你喜欢
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多