Я учусь быстро. Я хотел бы использовать собственный класс, который должен быть закодирован в [...] для [...]. Ниже приведен образец кода, который до сих пор пробовал. Класс в вопросе «GuestManager», который держит частную коллекцию гостей [объекты класса Гостя]Пользовательская коллекция в быстрой: это правильный путь?
import Foundation
class Guest{
var guestId: String
var guestName: String
init(gId: String, name: String){
self.guestId = gId
self.guestName = name
}
}
class GuestManager: GeneratorType, SequenceType{
private var guests = [Guest]?()
private var nextIndex: Int
init(guests: [Guest]){
self.guests = guests
self.nextIndex = 0
}
func next() -> Guest? {
if self.nextIndex > (self.guests?.count)! - 1 {
self.nextIndex = 0
return nil
}
let currentGuest = self.guests![self.nextIndex]
self.nextIndex += 1
return currentGuest
}
subscript(aGuestId gID: String) -> Guest{
return (self.guests?.filter({$0.guestId == gID}).first)!
}
}
Я не хочу, чтобы создать отдельные классы, которые, соответствующие GeneratorType & протоколов SequenceType. Вместо этого я создал один класс, соответствующий обеим протоколам.
Ниже приведены некоторые из моих вопросов:
Я хотел бы знать, если это правильный путь, чтобы иметь пользовательский тип коллекции?
Можем ли мы использовать индекс как способ выполнить поиск на основе свойства, например «subscript (aGuestId gID: String)» в примере кода выше?
Это ясно из кода для реализации функции next() в приведенном выше примере кода, который сбрасывает «nextIndex», когда итерация достигнута в конце. Как будет справиться с ситуацией, в которой мы используем заявление разрыва внутри для ... в цикле, как показано ниже:
for aGuest in guestManager{//guestManager an instance of GuestManager class instantiated with several guest objects print(aGuest.guestName) } for aG in guestManager{ print(aG.guestId) break }
В 2 для цикла кода разразиться после получения первого элемента [объекта гостя в этом случае ]. Последующий цикл будет начинаться с индекса 1 в коллекции, а не на 0. Есть ли в любом случае для обработки этой ситуации разрыва, так что для каждого последующего цикла для цикла всегда устанавливается значение 0?
Благодаря
Edit: Это кажется "NEXTINDEX" перезагрузки проблема может быть исправлена с ниже кодом [добавлен внутри класса GuestManager] для генерации() реализация метода
func generate() -> Self {
self.nextIndex = 0
return self
}
По подписке, я хочу сделать гостевойManager доступным для поиска по определенным ключевым свойствам, хотя верно, что мы можем создавать функции, но то, что я ищу, является более чистым способом выполнения поиска. – user2788672