2015-11-11 2 views
1

Я получаю следующую ошибку на симуляторе iphone6 ​​и выше., используя быстрое расширение от objc, и разницу типов

Различные методы, названные «intValue» найдено с несовпадением результата, тип параметра или атрибуты

на тренажере 5 и ниже, нет никакой ошибки.

код Оскорбление является

int destinationType = [[args objectForKey:@"destinationType"] intValue]; 

Я подозреваю, что это из-за быстрого расширения я добавил

extension NSNull { 

    func intValue() -> Int { 
     return 0 
    } 
} 

Так что я должен беспокоиться о том, что код не будет компилироваться на тренажере 6 и выше?

** EDIT **

Кажется, разница исходит из того, что iPhone 5 и менее являются 32bit и iPhone5s и выше являются 64bit.

Поэтому я должен возвращать более точный тип, чем Int, который может быть либо int32, либо int64.

Теперь мой код гласит следующее и интересно, если ее правильное решение

 func intValue() -> Int32 { 
     return 0 
    } 

ответ

1

метод Objective-C ожидает C int. Но Swift Int - это не a C int. Таким образом, указание Int32 является правильным, поскольку это равно так же, как и int, а также потому, что это то, что возвращают другие реализации intValue.

Конечно, это вызывает тот факт, что имя метода intValue уже используется в Objective-C. Objective-C не имеет перегрузки, поэтому, если вы собираетесь выбрать это имя, вы должны соответствовать в соответствии с существующей подписью (как вы сейчас это делаете).

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