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
您在哪里创建视图?你能在那里设置属性吗?考虑到我们需要处理的信息有限,这是一个很好的答案,但我觉得数据结构可能会有更根本的改进。我同意。可能存在导致此问题的潜在设计问题。