我是swift的新人,我从这里收集了大量数据来构建我的小项目。在这个地方,我有点失落,想问你这个:
我想将一种颜色和相应的混合比例保存到一个物体中(我打算将其保存在手机存储器中,但我现在还不是很远)。我可以毫无问题地做到这一点。但是当我添加其他混合比例的相同颜色时,我想删除之前创建的(相同)颜色。
这就是重点。我不知道如何删除前一个。 我到现在为止(这个论坛很棒)是这样的:
初学者:
class main{
var colorCollection:[color]!
init() {
colorCollection = [color]()
}
func addColor(iColorName:color) {
colorCollection.append(iColorName)
}
}
class color{
var colorName:String!
var ingredient:[ingredients]!
init() {
ingredient = [ingredients]()
}
func addIngredient(iIngredient:String) {
var tmpIngredient = ingredients()
tmpIngredient.ingredient = iIngredient
ingredient.append(tmpIngredient)
}
func arrayCount(){
println("Ingredients : \(ingredient.count)")
}
}
class ingredients{
var ingredient:String!
}
var CL = main()
var ingredient = color()
所以从这里开始创建像这样的对象:
CL.addColor(ingredient)
ingredient.colorName = "RED"
ingredient.addIngredient("20 ml: Magenta")
ingredient.addIngredient("21 ml: Yellow")
ingredient = color()
在几次诡计之后,用户决定更改GUI中的颜色并创建一个新对象:
CL.addColor(ingredient)
ingredient.colorName = "RED"
ingredient.addIngredient("20 ml: Magenta")
ingredient.addIngredient("22 ml: Yellow")
ingredient.addIngredient("51 ml: Black")
ingredient = color()
打印它:
for color in BN.colorCollection {
println("COLOR: \(color.colorName)")
for ingr in color.ingredient {
println(" -> Ingredient : \(ingr.ingredient)")
}
color.arrayCount()
}
结果是:
COLOR: RED
-> Ingredient : 20 ml: Magenta
-> Ingredient : 21 ml: Yellow
Ingredients : 2
COLOR: RED
-> Ingredient : 20 ml: Magenta
-> Ingredient : 22 ml: Yellow
-> Ingredient : 51 ml: Black
Ingredients : 3
如你所见,有两个RED我想只有新创建的那个。任何帮助都会很棒。 THX
答案 0 :(得分:1)
您只需将addColor
功能修改为:
func addColor(iColorName:color) {
var pos = -1
// Find if a color with the same name is already in the array
for (index, color) in enumerate(colorCollection) {
if (color.colorName == iColorName.colorName) {
pos = index
break
}
}
if (pos > -1) {
// If found, replace its with the new color object
colorCollection[pos] = iColorName
} else {
// Otherwise, add it
colorCollection.append(iColorName)
}
}
但那不会马上做你需要的。因为你的代码真的坏了。
colorName
是一个字符串,但iColorName
是color
类型的对象; ingredients
是一个类,但ingredient
是一个数组;稍后,您将变量ingredient
定义为类型color
,但iIngredient
是一个字符串!我现在想给你看一本书!2。 在发送到另一个对象之前,颜色尚未正确设置。
var ingredient = color()
CL.addColor(ingredient) // no name and no ingredients
ingredient.colorName = "RED"
ingredient.addIngredient("20 ml: Magenta")
ingredient.addIngredient("21 ml: Yellow")
对象可以在将颜色添加到数组之前克隆颜色,在这种情况下,后续语句对它没有影响。您应该在将对象传递给另一个对象之前完成设置:
var ingredient = color()
ingredient.colorName = "RED"
ingredient.addIngredient("20 ml: Magenta")
ingredient.addIngredient("21 ml: Yellow")
CL.addColor(ingredient) // now you are good!
colorName
属性被定义为可选,可让您执行所做的操作。但是真的希望颜色可能没有名字吗?