Не удалось найти эквивалент responsedsToSelector: @selector (charValue) в Swift 3 - PullRequest
0 голосов
/ 21 мая 2018

Я сделал много в Google, чтобы найти эквивалент responseds ToSelector, но я мог бы найти любое лучшее решение.Пожалуйста, предложите мне любой объект в Swift3 или 4.

Objetive-C

[(id)object respondsToSelector:@selector(charValue)]

В Swift у нас есть метод .method для типа данных AnyObject, но для любого типа данных

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Причина: Вы не можете написать respondsToSelector для функции на основе swift.Есть две причины.

1) В Objective-c у нас есть свойство charValue в классе NSNumber вместе с initWithChar.Тогда как в swift у нас нет таких свойств в классе NSNumber.

@property (readonly) char charValue;

- (NSNumber *)initWithChar:(char)value NS_DESIGNATED_INITIALIZER;

2) respondsToSelector принимает только функции Objective-C в качестве аргумента.

Попробуйте написать responds(to: #selector на NSNumber, и вы обнаружите, что он принимает только функцию target-c, и у нас нет такого метода в классе Swift NSNumber.

let numb: NSNumber?
numb?.responds(to: #selector(@objc method))

Скорее, Вы можете использовать быстрое преобразование строки NSNumber, как:

let number: NSNumber?
let numberString = number?.stringValue ?? "" 
// Added default variable "" in case of string conversion becomes nil
0 голосов
/ 21 мая 2018

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

(object as? Type)?.charValue()

, если ваш object не относится к типу, то он nil и никогда не вызывает charValue()

...