有没有办法创建所有颜色对象的数组?因此,每次添加新颜色时,它也会自动添加到数组中?
class Colours {
var colourName: String
var colourShades: [String?]
init(colourName: String, colourShades: [String?]) {
self.colourName = colourName
self.colourShades = colourShades
}
}
var red = Colours(colourName: "Red", colourShades: ["Crimson", "Cherry", "Rose"])
var blue = Colours(colourName: "blue", colourShades:["Ice", "Baby", "Royal"])
为了给出一些背景信息,我正在尝试为IOS开发一个包含颜色表的应用程序。然后当用户点击颜色时,它会将它们带到另一个具有该颜色阴影的表中。
我想要颜色数组,以便我可以自动填充表格的行,然后当用户添加新颜色时,它会自动添加新行。
答案 0 :(得分:3)
使用Colours
中定义的静态数组来保存已创建的所有颜色。您可以从应用中的任何位置以Colours.allColours
的形式访问此数组。
创建一个名为ColourWatcher
的协议,并在static
上创建delegate
Colours
,以便在添加颜色时收到通知。
让你的tableView实现ColourWatcher
并将自己添加为delegate
。然后,当添加颜色时,将在newColourAdded
中调用方法TableViewController
,您可以重新加载数据。
另外,我建议将颜色阴影数组设为[String]
而不是使用选项。空数组将表示您没有阴影。
protocol ColourWatcher: class {
func newColourAdded(colour: Colour)
}
class Colours {
static var allColours: [Colours] = []
static weak var delegate: ColourWatcher?
var colourName: String
var colourShades: [String]
init(colourName: String, colourShades: [String]) {
self.colourName = colourName
self.colourShades = colourShades
Colours.allColours.append(self)
Colours.delegate?.newColourAdded(colour: self)
}
}
class MyTableViewController: UIViewController, ColourWatcher {
func viewDidLoad() {
super.viewDidLoad()
Colours.delegate = self
}
func newColourAdded(colour: Colour) {
// reload table view or just insert a new row
// using the passed in colour
}
}
答案 1 :(得分:1)
有没有办法创建所有颜色对象的数组?所以 每次添加新颜色时,它也会自动添加 到阵列?
你可以在你的类中声明一个数组并像这样追加
lazy var colorList = {
Colours()
}()
我想要颜色数组,以便我可以自动填写 表的行,然后当用户添加新颜色时 自动添加新行。
func addColor() {
colorList.append(Colours(colourName: "Red", colourShades:
["Crimson", "Cherry", "Rose"]))
colorList.append(Colours(colourName: "blue", colourShades:["Ice",
"Baby", "Royal"]))
}
在添加颜色后调用上述方法,然后刷新表格以在表格行上显示新的颜色信息。
为了给出一些上下文,我正在尝试为IOS开发一个应用程序 包括一张颜色表。然后当用户点击它的颜色时 将他们带到另一张有这种颜色的桌子。
现在,在您的tableView cellForrowatindexpath
方法中,您只需访问上述colorlist
数组并获取colorname
并显示在您的表格上。
当用户点击单元格时,然后在didSelecteRowAtIndexpath
方法内加载另一个类并将上面的colorList
数组信息传递给该类,并为了显示颜色访问权限{{来自colourShades
数组的信息。
答案 2 :(得分:1)
在我看来,你想在整个应用程序中保留一个状态。
解决问题的最佳方法是创建Singleton实例。
E.g。
class ColoursSharedModel {
static let shared : ColoursSharedModel = ColoursSharedModel()
var choosenColors : [Colors] = []
private init() {}
}
稍后,您应该添加
ColoursSharedModel.shared.choosenColors.append(self)
在你的颜色'初始化。
答案 3 :(得分:1)
1)添加您自己的通知名称
extension NSNotification.Name {
// 1
static let NewColourAdded = NSNotification.Name(rawValue: "NewColourAdded")
}
2)将对象池的访问修饰符(静态变量all
)设置为private(set)
3)将初始化的颜色添加到对象池
4)发布通知
class Colours {
// 2
private(set) static var all: [Colours] = []
var name: String
var shades: [String]
init(name: String, shades: [String]) {
self.name = name
self.shades = shades
// 3
Colours.all.append(self)
// 4
NotificationCenter.default.post(
name: .NewColourAdded,
object: self
)
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(
self,
selector: #selector(self.onNewColourAdded),
name: .NewColourAdded,
object: nil
)
}
func onNewColourAdded(notification: Notification) {
guard let newColours = notification.object as? Colours else {
return
}
// Do something
}
}