如何在swift中添加新对象后删除重复对象

时间:2015-06-03 20:58:17

标签: swift

我是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

1 个答案:

答案 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)
    }
}

但那不会马上做你需要的。因为你的代码真的坏了。

您的代码出了什么问题:

  1. 疯狂命名约定:colorName是一个字符串,但iColorNamecolor类型的对象; ingredients是一个类,但ingredient是一个数组;稍后,您将变量ingredient定义为类型color,但iIngredient是一个字符串!我现在想给你看一本书!
  2. 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!
    
    1. 没有名称的颜色:colorName属性被定义为可选,可让您执行所做的操作。但是真的希望颜色可能没有名字吗?