【问题标题】:how can I check if a structure is in the array of structures based on its field in Swift3?如何根据 Swift3 中的字段检查结构是否在结构数组中?
【发布时间】:2017-03-23 22:56:43
【问题描述】:

在我的swift 应用程序中,我有一个结构:

open class MyStruct : NSObject {

    open var coordinate = CLLocationCoordinate2D(latitude: 0, longitude: 0)
    open var username: String? = ""
    open var id: String? = ""
}

我创建了一个数组:

var array:[MyStruct] = []

然后我正在创建一个对象:

let pinOne = MyStruct()
pinOne.coordinate = CLLocationCoordinate2D(latitude: request.latitude, longitude: request.longitude)
pinOne.username = request.username
pinOne.id = request.id

只有当数组不包含它时,我才想将它添加到数组中。我试过这个:

if(!(self.array.contains(pinOne))){
    self.array.append(pinOne)
}

但它不起作用,所以我想既然我有唯一的ids,我可以使用该字段来比较对象。但在这种情况下,我不知道如何比较结构的字段。你能帮我解决这个问题吗?

【问题讨论】:

  • 一个名为MyStruct的类?为什么?

标签: arrays swift swift3 contains


【解决方案1】:

更短更简单:

if array.index(where: {$0.id == pineOne.id}) == nil {
   array.append(pineOne)
}

【讨论】:

  • 我认为正确的语法是== false,而不是nil
【解决方案2】:

而不是在检查它的存在之前创建MyStruct 的对象,您只需要在它不存在于Array 时创建它。另外建议在MyStruct 中创建一个init 方法,例如init(coordinate: CLLocationCoordinate2D, name: String, id: String),这将减少您在新行中初始化每个实例属性的代码。

open class MyStruct : NSObject {

    open var coordinate = CLLocationCoordinate2D(latitude: 0, longitude: 0)
    open var username: String? = ""
    open var id: String? = ""

    init(coordinate: CLLocationCoordinate2D, name: String, id: String) {
        self.coordinate = coordinate
        self.username = name
        self.id = id
    }
}

现在检查包含这样的内容。

if !array.contains(where: {$0.id == request.id}) {
    let pinOne = MyStruct(coordinate: CLLocationCoordinate2D(latitude: request.latitude, longitude: request.longitude), name: request.username, id: request.id)
    self.array.append(pinOne)
}

【讨论】:

    【解决方案3】:
    if(array.contains({$0.id==pinOne.Id}))
    {
       array.addElement(pinOne);
    }
    

    【讨论】:

    • hm,只是为了确保 - 如果我想在数组中添加一个元素,如果它是 not,那么我需要使用 if(!(array.contains({$ .id==pinOne.Id}))),对吗?
    • 另外,我的编译器(在swift 3 中)引发了$ 未解决的错误:|
    猜你喜欢
    • 2017-09-25
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    相关资源
    最近更新 更多