2014-12-19 2 views
1

Вот a link Учебник Swift.Swift class add "@objc" для почему

Я прочитал раздел протокола, я знаю, если протокол помечается @objc:

@objc protocol CounterDataSource { 
    optional func incrementForCount(count: Int) -> Int 
    optional var fixedIncrement: Int { get } 
} 

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

но Учебник не сказал, почему класс должен быть помечен с помощью @objc тоже ??

@objc class Counter { 
    var count = 0 
    var dataSource: CounterDataSource? 
    func increment() { 
     if let amount = dataSource?.incrementForCount?(count) { 
     count += amount 
     } else if let amount = dataSource?.fixedIncrement? { 
     count += amount 
     } 
    } 
} 

если я удалить @objc из класса, компилятор не показывать сообщение об ошибке слишком

так, что различное между добавить @objc к классу или нет?

ответ

4

Deprecation

Это уже не возможно в последних Swift выпусками использовать @objc без NSObject поэтому этот ответ является устаревшим.

Оригинал

@objc предваряется для классов, чтобы они могли быть использованы в ObjC. Если вы имеете дело исключительно с Swift, это не нужно.

Кроме того, если ваш класс наследуется от класса ObjC, префикс не нужен.

+0

Но только классы, наследующие NSObject, могут быть объявлены '@ objc'. Итак, когда '@ objc' когда-нибудь будет полезен перед классом? –

+0

@AndrewPaulSimmons - вы были бы правы, что это не полезно. Раньше можно было использовать '@ objc' w/o' NSObject', но эта возможность была удалена в последующих версиях Swift. Я соответствующим образом обновлю ответ. – Logan