我的上下文如下:我有一个可以绘制不同房间形状的视图控制器。每个墙都是UIView的子类。墙的模型如下:
struct Wall {
let name: String
let number: Int
var length: CGFloat?
var attachedObjects: [WallObject]?
var isSelected: Bool
}
因此每个墙都有一个属性,可以分配上述属性之一。 当在一面墙上发生点击时,发件人会被存储到一个可选变量中:
@objc fileprivate func changeWallProperties(sender: UITapGestureRecognizer) {
guard let tappedWall = sender.view as? RoomShapeDrawingV else {print("could not get wall"); return}
tappedWall.wallModel?.isSelected = true
selectedWallModel = tappedWall.wallModel
我有一个集合视图,显示可以在墙上的对象。当选择一个单元格时,我得到一个WallObject类型,它是集合视图内容的另一个结构,需要将选择放入所选墙的模型中:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let aWallHasBeenSelected = isWallSelected else {print("could not get the selected wall"); return}
if aWallHasBeenSelected {
print("a wall has been selected")
let wallObject = wallObjects[indexPath.item]
selectedWallModel?.attachedObjects?.append(wallObject)
最后一行什么也没做,[attachedObjects]在所选墙的模型中是零。我在这篇文章中找到了一个解决方案:Adding elements to optional arrays in Swift 但我想知道为什么会发生这种情况,如果代表我或者有什么逻辑错误。是因为我使用结构并且我复制它们,或者还有其他事情发生?