gpt4 book ai didi

swift - 如何在快速添加新对象后删除重复对象

转载 作者:可可西里 更新时间:2023-11-01 02:21:32 26 4
gpt4 key购买 nike

我是 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,我只想使用新创建的那个。任何帮助都会很棒。谢谢

最佳答案

您只需将 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 是一个字符串,但 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!
  1. 没有名称的颜色:colorName 属性被定义为可选的,这让您可以做您做的事。但真的期望一种颜色可能没有名字吗?

关于swift - 如何在快速添加新对象后删除重复对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30630587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com