Как гласит заголовок, мне трудно преобразовать следующий код из цели c в swift.
UIView * (^viewForContent)(BookObject *) = ^UIView*(BookObject * content) {
NSString * title = content.title;
NSString * markdown = nil;
if ([content respondsToSelector:@selector(markdown)]) {
markdown = [content performSelector:@selector(markdown)];
}
return viewForItem(title, markdown);
};
Ниже моя попытка.
var viewForContent = { (content: BookObject) -> UIView in
var title = content.title
var markdown: String? = nil
if content.responds(to: Selector(markdown!)) {
markdown = content.perform(Selector(markdown!)) //error: Cannot assign value of type 'Unmanaged<AnyObject>?' to type 'String?'
}
return viewForItem(title!, markdown!);
}
BookObject наследуется от NSObject,Проблема с этим кодом заключается в том, что я получаю сообщение об ошибке perform(aSelector: Selector!)
.Я очень новичок в Swift, и мне было трудно сузить проблему с моим кодом.Что мне здесь не хватает?
РЕДАКТИРОВАТЬ
В соответствии с запросом здесь приводится дополнительная информация о BookObject и о том, что делает этот блок кода.Есть еще один объект с именем BookTextObject, который наследуется от BookObject.Этот BookTextObject имеет свойство markdown, а BookObject - нет.respondsToSelector
и performSelector
предназначены для того, чтобы проверить, является ли уценка свойством для содержимого, и если да, также установить значение в этом свойстве уценки для этой переменной уценки.
Я не писал этот кодЯ просто пытаюсь преобразовать его в Свифт.Кроме того, никогда не кажется, что результат оператора if будет ложным (т. Е. Кажется, что контент всегда является BookTextObject), но, поскольку я не писал этот код, я бы не стал вынимать ifзаявление о страхе что-то сломать.