我试图将一些Swift代码带入我的旧obj-c项目中。 Swift类可以从obj-c类访问,但不是所有的属性都可以访问。例如
public var menuTitleColor: UIColor!
完美无缺,但
public var cellHeight: CGFloat!
找不到。我认为这是因为CGFloat不是一个对象。有没有办法在不更改Swift文件的情况下访问此属性?
答案 0 :(得分:3)
看看这个Swift类
@objc class Foo: NSObject {
var myCGFloatOptional: CGFloat? = 1
var myCGFloat: CGFloat = 1
}
如果我在Objective-C中使用它,则只有myCGFloat
属性可用。
Foo * foo = [Foo new];
foo.myCGFloat;
foo.myCGFloatOptional; // Compile Error
这是因为在Objective-C中CGFloat
是一种原始类型(如float
)。而Objective-C不允许基本类型的nil
值。
就像你不能在Objective-C中写这个
float number = 1;
number = nil; // compile error
在Objective-C代码中,您可以看到Swift中声明的UIColor!
类型的属性,因为UIColor
是一个类。因此,您声明了一个可以引用UIColor
或不引用任何实例的指针。
在Objective-C中,确实存在相同的概念。
您可以注意到int
也是Objective-C中的原始类型,但是,“意外地”,编译器允许您编写
int number = 1;
number = nil;
但是在这种情况下,nil
只被解释为整数0(仍然是一个值,而不是nil
)。
答案 1 :(得分:1)
您可以尝试以下代码:
public var cellHeight: CGFloat = 0 //(or some other number)