给定一个 stackView 对象,我得到了一个 stackView.arrangedSubviews
的数组
这是一个只能获取的属性。因此我不能仅仅通过这样做来替换其中的一项
stackView.arrangedSubviews[i] = newSubView
我想到的是我想替换stackView.arrangedSubviews[i]
处的引用内容与 newSubView 的内容。例如,如果这是用 C 语言编写的,我会做类似的事情
*arrangedSubViews[i] = *newSubView
我知道有一种方法可以通过删除arrangedSubViews并利用addArrangedSubView来完成我需要的操作,但它不会非常有效。
最佳答案
您无法修改不可变数组,这在很多方面都是一件好事。
您可以创建一个扩展方法来替换 View ,如下所示:
@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)
就性能而言,这样做不会产生负面影响。
关于xcode - swift中修改对象的引用内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716345/