我在学习斯威夫特。
这些天我主要在iOS上工作,但我目前正在为OS X开发一个小项目。
在OSX上,我喜欢使用Cocoa绑定将模型中的值链接到UI元素。它节省了编写大量胶代码。
我正在编写一个程序,将Swift的性能与C/Objective-C的性能进行比较。我正在使用素数生成器作为测试项目。
我已经创建了一个Swift Struct
ComputeSettings
它封装了在Swift和Objective-C中运行素数生成器的设置(和结果)。结构如下所示:
struct ComputeResults
{
var totalCalculated: Int = 0
var primesPerSecond: Int = 0
var totalTime: NSTimeInterval = 0
}
struct ComputeSettings
{
var totalToCalculate: Int = 10000000
var swiftResults: ComputeResults = ComputeResults()
var objCResults: ComputeResults = ComputeResults()
}
然后在视图控制器中有一个ComputeSettings类型的实例变量:
class ViewController: NSViewController
{
var theComputeSettings = ComputeSettings()
var foo: Int = 12
//...
}
在我的UI中,我有一个文本字段,允许用户输入要计算的素数的数量。在IB中,我选择字段,选择实用程序区域中的绑定选项卡,然后打开值绑定。我必须遵守
ViewController
班我输入模型密钥路径
self.theComputeSettings.totalToCalculate
.
当我运行项目时,它会失败,并出现异常:
无法设置(contentViewController)用户定义的检查属性
上(NSWindow):[addObserver:
对于KeyPath:@“theComputeSettings.totalToCalculate”选项:256
上下文:0x0]被发送到不符合KVC的对象
“ComputeSettings”属性。
相反,如果我绑定到伪属性
foo
(因此模型密钥路径设置为
self.foo
)它工作得很好。在这种情况下,我看到文本字段显示值12。
是否有一些方法可以使用Swift结构,并且仍然可以使用Cocoa绑定?我做了大量的谷歌搜索,但一无所获。
我当然可以用手动的方式,编写一堆粘合代码,将我的值从结构安装到窗口的视图中,但我更愿意使用Cocoa绑定。这就是他们的目的。