在swift中修改对象的引用内容

时间:2016-04-19 10:57:21

标签: xcode swift

给定一个stackView对象,我得到了一个stackView.arrangedSubviews数组 这是一个唯一的财产。因此,我只能通过

来替换它的一个项目
stackView.arrangedSubviews[i] = newSubView

我想到的是想要将stackView.arrangedSubviews[i]的引用内容替换为newSubView的内容。例如,如果这是在C中,我会做类似

的事情
*arrangedSubViews[i] = *newSubView

我知道有一种方法可以通过删除arrangeSubViews并使用addArrangedSubView来完成我需要的工作,但它不会非常有效。

1 个答案:

答案 0 :(得分:0)

你无法修改不可变数组,这在很多方面都是好事。

您可以创建一个扩展方法来替换这样的视图:

@available(iOS 9.0, *)
extension UIStackView {
    func replaceView(atIndex index: Int, withView view: UIView) {
        let viewToRemove = arrangedSubviews[index]
        removeArrangedSubview(viewToRemove)
        insertArrangedSubview(view, atIndex: index)
    }
}

然后,您可以使用此代码代替stackView.arrangedSubviews[i] = newSubView

stackView.replaceView(atIndex: i, withView: newSubView)

在表现方面,这样做没有任何负面影响。