BOOL несовместим с Bool в Swift 4.1.

При переопределении в подклассе Swift класса Objective-C я получаю сообщение:

Тип свойства «BOOL» (он же «bool») несовместим с типом «Boolean» (он же «unsigned char»), унаследованным от «ChildClass».

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

Любая идея, как правильно переопределить Objc BOOL в Swift

Код Swift (подкласс):

override var myVar: Bool {
    get {
        return something ? true : myVar
    }
    set {
        myVar = newValue
    }
}

Объявление родительского объекта:

@property(atomic) Boolean isLoading;

Заголовок Swift, в котором появляется предупреждение:

SWIFT_CLASS("_TtC6Module30ChildClass")
@interface ChildClass : ParentClass
@property (nonatomic) BOOL myVar; //<----- Here 
@end

person Antzi    schedule 30.03.2018    source источник
comment
в виде? Bool - тоже не работает?   -  person Sergey Hleb    schedule 30.03.2018
comment
@SergeyHleb Извините, я не был так ясен. Я добавил код, чтобы устранить неоднозначность. Проблема в объявлении заголовка моста   -  person Antzi    schedule 30.03.2018
comment
Вы действительно используете/переопределяете переменную isLoading?   -  person Sulthan    schedule 30.03.2018
comment
может быть, это может вам помочь?   -  person Sergey Hleb    schedule 30.03.2018


Ответы (1)


в ObjC BOOL и bool не совпадают (BOOL — знаковый char, тогда как bool — он же C bool — беззнаковый char). Boolean также typedef для unsigned char, так же как и C bool. Можете ли вы изменить свойство objC на BOOL? если нет, то используйте быстрый тип CBool.

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html

person Florian Burel    schedule 30.03.2018
comment
Если я изменю тип Swift, он будет жаловаться на несовместимость с bool. Действительно, использование BOOL в родительском объекте помогло. Я так привык использовать только BOOL в objc, что даже не заметил, что родитель имеет другой тип - person Antzi; 30.03.2018