Ios 如何创建一个函数来设置swift中其他实例的属性?

Ios 如何创建一个函数来设置swift中其他实例的属性?,ios,swift,function,Ios,Swift,Function,我试图用一种更短的方式编写以下代码 func colourChangeIfDeletionCancelled(word:Int){ for i in 0...selectedWords[word].count - 1 { let square = selectedWords[word][i] arrayOfRows[square.0][square.1].topToRight.backgroundColor = nil arrayOfRows[squar

我试图用一种更短的方式编写以下代码

func colourChangeIfDeletionCancelled(word:Int){
    for i in 0...selectedWords[word].count - 1 {
        let square = selectedWords[word][i]

    arrayOfRows[square.0][square.1].topToRight.backgroundColor = nil
    arrayOfRows[square.0][square.1].topToLeft.backgroundColor = nil
    arrayOfRows[square.0][square.1].bottomToRight.backgroundColor = nil
    arrayOfRows[square.0][square.1].bottomToLeft.backgroundColor = nil
    arrayOfRows[square.0][square.1].horizontalTube.backgroundColor = nil
    arrayOfRows[square.0][square.1].verticalTube.backgroundColor = nil
    arrayOfRows[square.0][square.1].endFromLeft.backgroundColor = nil
    arrayOfRows[square.0][square.1].endFromRight.backgroundColor = nil
    arrayOfRows[square.0][square.1].endFromTop.backgroundColor = nil
    arrayOfRows[square.0][square.1].endFromBottom.backgroundColor = nil

    }
}
这段代码可以工作,但我确信有更好(更短)的方法来编写它,但我不确定如何编写。我曾尝试创建一个函数,将子视图作为变量,但我不知道如何做。我相信这不是最难的问题,但我一直坚持下去,非常感谢您的帮助

编辑:

arrayOfRows只是我创建的名为LetterSquareView的类的数组数组

 class LetterSquareView: UIView {
 var letter:String!

@IBOutlet weak var topToLeft: UIView!
@IBOutlet weak var topToRight: UIView!
@IBOutlet weak var bottomToRight: UIView!
@IBOutlet weak var bottomToLeft: UIView!
@IBOutlet weak var horizontalTube: UIView!
@IBOutlet weak var verticalTube: UIView!
@IBOutlet weak var endFromLeft: UIView!
@IBOutlet weak var endFromRight: UIView!
@IBOutlet weak var endFromTop: UIView!
@IBOutlet weak var endFromBottom: UIView!

@IBOutlet weak var topToLeftWhiteSpace: UIView!
@IBOutlet weak var topToRightWhiteSpace: UIView!
@IBOutlet weak var bottomToRightWhiteSpace: UIView!
@IBOutlet weak var bottomToLeftWhiteSpace: UIView!

@IBOutlet weak var letterSquareViewView: LetterSquareViewView!
@IBOutlet var letterSquareView: UIView!
@IBOutlet weak var letterLbl: UILabel!

init(frame: CGRect, letter: String) {

    super.init(frame: frame)

    NSBundle.mainBundle().loadNibNamed("LetterSquareView", owner: self, options:  nil)

    letterLbl.text = letter.capitalizedString
    self.letter = letter
    self.addSubview(letterSquareView)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

我试图更改的子视图的背景色在创建时设置了背景色。我正试图在删除该颜色时将其删除。我以为会有一个函数,您可以输入一个视图数组,输入一个要设置的属性,但我找不到任何类似的属性。

我想最直接的方法是:

func clearBackgroundColors(e: WhateverViewThisIs) {
      for view in [e.topToRight, e.topToLeft, etc. ] {
          view.backgroundColor = nil
      }
}

clearBackgroundColors(arrayOfRows[square.0][square.1])
一个值得思考的问题是关于班级的责任。我认为
arrayOfRows[][]
中的视图应该将其子视图设置为私有视图,对它们的了解可能是实现细节,而不是公共知识。因此,
clearBackgroundColors()
方法应该放在那里,而不是从更全局的位置设置所有颜色

import UIKit

var arrayOfRows: [[UIView]] = [[]]
let square: (Int, Int)!
使您的touple代码更干净的一种方法:

//extracting touple
let (row, col) = square
arrayOfRows[row][col].topToRight.backgroundColor = nil
只有在确定此视图的所有子视图都要使背景色为零时才使用此选项

//for all views
for arrayOfColumns in arrayOfRows {
    for views in arrayOfColumns {
        for subview in views.subviews {
            subview.backgroundColor = nil
        }
    }
}
这就是我建议的处理方法。这还允许您使用OOP设计进一步自定义这些视图。那你可以

//with class type
//use this if there are other subviews
//make all your views in your list a CustomViewToMakeNil
class CustomViewToMakeNil: UIView {
    //set the views content
}

for arrayOfColumns in arrayOfRows {
    for views in arrayOfColumns {
        for subview in views.subviews {
            //check if they are of the type you want to make the color nil
            if subview is CustomViewToMakeNil {
                subview.backgroundColor = nil
            }
        }
    }
}

什么是方阵,什么是方阵?
arrayOfRows
中的元素类型是什么?您希望我们帮助您提高数据结构的使用率,而不向我们提供有关数据结构的任何信息。这是怎么回事?你有没有包括arrayOfRows所有的子视图?或特定类类型的每个子视图。您应该对自定义视图进行扩展,以执行该代码,以便调用更方便的方法,如
arrayOfRows[square.0][square.1]。everyCaseBackgroundColor=nil
您在哪里创建视图?你能在那里设置属性吗?考虑到我们需要处理的信息有限,这是一个很好的答案,但我觉得数据结构可能会有更根本的改进。我同意。可能存在导致此问题的潜在设计问题。