我正在尝试将一些 Swift 代码引入我的旧 obj-c 项目中。Swift 类可以从 obj-c 类访问,但不是它的所有属性。例如
public var menuTitleColor: UIColor!
Run Code Online (Sandbox Code Playgroud)
工作得很好,但是
public var cellHeight: CGFloat!
Run Code Online (Sandbox Code Playgroud)
没有找到。我认为这是因为 CGFloat 不是一个对象。有没有办法在不更改 Swift 文件的情况下访问此属性?
看看这个 Swift 类
@objc class Foo: NSObject {
var myCGFloatOptional: CGFloat? = 1
var myCGFloat: CGFloat = 1
}
Run Code Online (Sandbox Code Playgroud)
如果我在 Objective-C 中使用它,则只有该myCGFloat属性可用。
Foo * foo = [Foo new];
foo.myCGFloat;
foo.myCGFloatOptional; // Compile Error
Run Code Online (Sandbox Code Playgroud)
这是因为在 Objective-C 中CGFloat是原始类型(如float)。Objective-C 不允许nil使用原始类型的值。
就像你不能用 Objective-C 写这个一样
float number = 1;
number = nil; // compile error
Run Code Online (Sandbox Code Playgroud)
在 Objective-C 代码中,您可以看到UIColor!Swift 中声明的类型的属性,因为它UIColor是一个类。因此,您声明的指针可以引用某个实例UIColor,也可以不引用任何内容。
在 Objective-C 中也存在同样的概念。
您可能会注意到,这int在 Objective-C 中也是一个原始类型,但是“出乎意料”的是,编译器确实允许您编写
int number = 1;
number = nil;
Run Code Online (Sandbox Code Playgroud)
然而,在这种情况下,nil它被简单地解释为整数 0(仍然是一个值,而不是真正的值nil)。
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |