2016-02-11 2 views
3

Я новичок в Swift, и у меня возникли проблемы с возвратом объекта в массив по свойству.Swift - Получить объект в массиве по свойствам

Обратите внимание, что я использую Swift 2.0.

У меня есть следующий массив;

//Dummy Data prior to database call: 
static var listPoses = [ 
    YogaPose(id: 1, title: "Pose1", description: "This is a Description 1", difficulty: Enums.Difficulty.Beginner, imageURL: "Images/Blah1"), 
    YogaPose(id: 2, title: "Pose2", description: "This is a Description 2", difficulty: Enums.Difficulty.Advanced, imageURL: "Images/Blah2"), 
    YogaPose(id: 3, title: "Pose3", description: "This is a Description 3", difficulty: Enums.Difficulty.Intermediate, imageURL: "Images/Blah3"), 
    YogaPose(id: 3, title: "Hello World", description: "This is a Description 3", difficulty: Enums.Difficulty.Intermediate, imageURL: "Images/Blah3") 
] 

У меня теперь есть метод, с помощью которого я хотел бы вернуть объект по идентификатору. Может кто-нибудь, пожалуйста, сообщите, как я это сделаю? где listPose.Id === Id;

//Returns a single YogaPose By Id: 
class func GetPosesById(Id: Int) -> YogaPose{ 


    if(listPoses.count > 0){ 
     return listPoses() ... 
    } 

} 
+0

Или этот: [ Найти объект в массиве?] (Http://stackoverflow.com/questions/28727845/find-an-object-in-array). –

ответ

9

Таким образом, Swift предоставляет вам способ фильтрации списка объектов на основе требуемого условия.

В этом случае вам нужно будет использовать filter функцию:

class func GetPosesById(Id: Int) -> YogaPose?{ 
    return listPoses.filter({ $0.id == Id }).first 
} 

В основном, функция filter будет цикл через весь listPoses и возвращает вам [YogaPose]. Код ({$0.id == Id}) - это ваше состояние, а $0 означает текущий объект в цикле.

Я также изменить ваши функции подписи немного

class func GetPosesById(Id: Int) -> YogaPose 

Для

class func GetPosesById(Id: Int) -> YogaPose? 

потому что first свойство является необязательным объект, который вам нужно будет разворачивать позже

Смежные вопросы