agi*_*ult 3 objective-c compiler-warnings pointer-conversion swift swift-protocols
使用XCode 10.1/Swift 4.2.
我正在尝试将符合Swift协议的对象分配给Objective-C指针.以下代码是一个最小的示例,编译和按预期工作,但它给了我以下警告:
如果分配给局部变量: Incompatible pointer types initializing 'NSObject<Animal> *__strong' with an expression of type 'id<Animal> _Nullable'
如果分配给存储的属性:
Incompatible pointer types assigning to 'NSObject<Animal> *' from 'id<Animal> _Nullable'
关于如何解决这个警告而不仅仅是沉默它的任何想法?
SWIFT代码:
@objc protocol Animal {
var name: String { get }
}
@objc class Pig: NSObject, Animal {
var name: String = "pig"
}
@objc class Cow: NSObject, Animal {
var name: String = "cow"
}
@objc class Farm: NSObject {
static func getAnimal(name: String) -> Animal? {
// return some animal or nil
}
}
Run Code Online (Sandbox Code Playgroud)
Objective-C代码:
// This code returns a valid pointer to a Pig object
// that is usable in objective-c, but it also triggers
// the warning described above
NSObject<Animal>* animal = [Farm getAnimalWithName:@"pig"];
Run Code Online (Sandbox Code Playgroud)
指定每个Animal实现者还实现NSObject的接口:@objc protocol Animal : NSObjectProtocol
您还可以将ObjC中的变量类型更改为id<Animal>.
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |