从Objective-c项目访问时找不到某些Swift类属性

时间:2015-12-03 09:30:27

标签: objective-c swift

我试图将一些Swift代码带入我的旧obj-c项目中。 Swift类可以从obj-c类访问,但不是所有的属性都可以访问。例如

public var menuTitleColor: UIColor!

完美无缺,但

public var cellHeight: CGFloat!
找不到

。我认为这是因为CGFloat不是一个对象。有没有办法在不更改Swift文件的情况下访问此属性?

2 个答案:

答案 0 :(得分:3)

Objective-C中的原始类型

看看这个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)