2015-08-16 4 views
1

Так что это, наверное, очень простой вопрос, но я посмотрел и не могу найти ответ. Предположим, что я создал класс, и я заполняю NSMutableArray экземплярами этого класса, и это все. Я хочу использовать цикл for для цикла. Каков самый простой способ бросить, поэтому мне не нужно каждый раз, когда я хочу вызвать текущий экземпляр в цикле?Когда бросать в swift

Здесь показано:

for m in objects { 
     m.randomVar = "hello" 
    } 

где т мой пользовательский объект, который имеет randomVar в виде строки и объектов представляет собой массив пользовательских объектов.

Конечно, код, указанный выше, не будет выполняться, потому что xcode предполагает, что m является [AnyObject?]. Где и как было бы лучше всего получить m в своем классе. Предположим, мы меняем более одной переменной, поэтому кастинг каждый раз не оптимален.

Извините, если я не понимаю. Спасибо

ответ

3
  1. Избегайте возникновения проблемы.

    Не используйте NSArray/NSMutableArray - используйте только let/var переменных чистых массивов Swift, таких как [MyClass].

    Или, если массив исходит из Objective-C, в Xcode 7+ вы можете использовать синтаксис NSArray<MyClass *> *, чтобы выставить его Swift в [MyClass], а не [AnyObject].

  2. Включить массив.

    Использование objects as! [MyClass] (небезопасным), если вы абсолютно уверены, что он содержит экземпляры MyClass.

  3. Включить переменную.

    for m in objects { 
        if let m = m as? MyClass { ... 
        // or 
        let myobj = m as! MyClass // unsafe 
    

    или в Swift 2 (Xcode 7)

    for case let m as MyClass in objects { 
        // this is executed only for objects which are instances of MyClass, 
        // ignoring other objects in the array. 
    } 
    
Смежные вопросы