Что вам не хватает, так это то, что NSSet и остальная часть Foundation, Cocoa и т. Д. Все еще существуют и всегда будут.
EDIT: В Swift 1.2, Set является родным Swift, и вы будете использовать его вместо этого.
Нет ничего плохого в использовании NSSet, когда вам нужно. Вот пример из моего кода:
class TracksViewController : UITableViewController {
// ...
var observers = NSMutableSet()
// ...
override func viewDidLayoutSubviews() {
func noteNowPlayingItem (note:NSNotification?) {
// ...
}
// do it now!
noteNowPlayingItem(nil)
// and do it later, when now playing item notification arrives
let ob = NSNotificationCenter.defaultCenter().addObserverForName(MPMusicPlayerControllerNowPlayingItemDidChangeNotification,
object: nil, queue: NSOperationQueue.mainQueue(),
usingBlock: noteNowPlayingItem)
self.observers.addObject(ob)
}
// ...
}
Так что я использую NSMutableSet как способ хранения наблюдателей уведомлений, так что я могу сделать управление памятью позже. Нет проблем.
Заметим, однако, что как раз в этом маленьком фрагменте кода я воспользовавшись функциями Swift, которые ставят его на голову выше Objective-C, на мой взгляд:
Свойство NSMutableSet не имеет для инициализации в коде (например, в инициализаторе или в viewDidLoad
); Я делаю это правильно, когда я заявляю об этом. Вы не можете сделать это в Objective-C. Так что это безопасно; это свойство никогда не будет случайно ничтожным (это когда-либо случалось с вами?).
Я использую функцию в функции, так что я могу оба вызвать замыкание и передать его. Да, вы можете сделать то же самое в Objective-C (дать блок имя), но этот синтаксис проще или что? Мне приходилось искать синтаксис «именованного закрытия» каждый раз, когда я его использовал; теперь я трачу свое время на написание кода, не глядя на неясный синтаксис, который я не могу писать или читать.
В самом деле, просто торчит с массивами на минуту, Есть много раз, когда у Вас есть Swift массив, но вы должны бросить его в NSArray, или передать массив в метод какао, который принимает NSArray , чтобы вызвать некоторый метод Foundation, который не имеет эквивалента Swift. Это не проблема.
Словарь 'действует в основном как набор. –
newacct