2016-11-14 94 views
0

如何为可选数据类型的属性设置可可绑定?可可绑定到swift中的可选属性

我有通过键绑定,而这又是管理对象为[属性]的阵列,其被定义为从NSArrayController的显示数据一个NSTableView:

class Property: NSObject { 
     var distance: CLLocationDistance  
     var ETA: TimeInterval?     
     var coordinates: CLLocationCoordinate2D 
     // other properties and methods here 
    } 

在MainViewController我定义

var properties: [Property] = [] 
    @IBOutlet var arrayController: NSArrayController! 

其中arrayController势必properties阵列, NSTableView势必阵列控制器(控制器密钥= arrangedObjects) 和然后个体TableViewCells绑定到的表格单元格视图(模型关键路径= objectValue.distance等)

代码编译没有任何问题,但在运行时它时,它试图加载表崩溃各种属性。问题在于ETA列,因为properties.ETA是可选的。处理这个问题的正确方法是什么?谢谢

回答

0

你不能,至少不能直接。

Cocoa Bindings通过Objective-C运行时工作,而ObjC无法表示Swift Optionals不是对象(又名类别引用)类型。 (也就是说,你可以访问ObjC的NSWindow?,甚至是AnyObject?,但不是一个Int?CGRect?TimeInterval?。)

这里您最好的选择可能是回落到做事情你会的方式ObjC - 使ETA是一个非可选的TimeInterval,并使用一些sentinel值(negative something-huge?)来表示没有设置ETA的情况。您可以使用值转换器来确保这些案例在您的用户界面中得到适当的表示。

或者,你可以保留在Swift中使用的可选属性,并公开用于绑定的非可选类型的第二个计算属性。

+0

谢谢!并且鉴于可可绑定的ObjC起源,它是完全意义上的。我去了第二个替代(计算属性),它的工作原理。 –