2016-11-10 6 views
1

В моем swift приложение у меня есть структура:Как я могу проверить, находится ли структура в массиве структур на основе своего поля в Swift3?

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 

и I хотите добавить его в массив только в том случае, если массив его не содержит. Я пытался с этим:

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

Но это не сработало, так что я подумал, что, поскольку у меня есть уникальные id с, я мог бы использовать это поле для сравнения объектов. Но я не знаю, как сравнить поля структур в этом случае. Можете ли вы мне помочь?

+0

Класс с именем 'MyStruct'? Зачем? –

ответ

3

Вместо того чтобы создавать объект MyStruct перед проверкой его существования необходимо создать только тогда, когда его не существует в Array. Также как предложение создать один метод в MyStruct, как 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) 
} 
+0

это @NiravD, большое спасибо за хороший совет! – user3766930

0
if(array.contains({$0.id==pinOne.Id})) 
{ 
    array.addElement(pinOne); 
} 
+0

hm, просто для того, чтобы убедиться - если я хочу добавить элемент, если это не '' 'в массиве, тогда мне нужно использовать if ('! '(Array.contains ({$. Id == pinOne.Id }))), правильно? – user3766930

+0

также, мой компилятор (в 'swift 3') вызывает ошибку' '' неразрешен: | – user3766930

+0

извините, это mikes 0 char, $ 0.id, я был прав – Newyearnt

0

Короче & проще:

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