macos – 如何使用针对Swift结构的Cocoa绑定

macos – 如何使用针对Swift结构的Cocoa绑定,第1张

概述我正在学习斯威夫特. 这些天我主要在iOS工作,但我目前正在为OS X开发一个小项目. 在OSX上,我喜欢使用Cocoa绑定将我的模型中的值链接到UI元素.它节省了大量的胶水代码. 我正在编写一个程序,将Swift的性能与C / Objective-C的性能进行比较.我正在使用素数生成器作为测试项目. 我创建了一个Swift Struct ComputeSettings,它封装了在Swift和Ob 我正在学习斯威夫特.

这些天我主要在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的模型关键路径.

当我运行我的项目时,它失败并出现异常:

Failed to set (contentVIEwController) user defined inspected property
on (NSWindow): [ addobserver:
forKeyPath:@”theComputeSettings.totalToCalculate” options:256
context:0x0] was sent to an object that is not KVC-compliant for the
“theComputeSettings” property.

相反,如果我绑定到虚拟属性foo(因此模型键路径设置为self.foo)它完美地工作.在这种情况下,我看到我的文本字段显示我的值12.

有没有办法使用Swift结构并仍然可以使Cocoa绑定工作?我做了相当多的谷歌搜索,但找不到任何东西.

我当然可以用手动方式来做,并编写一堆粘合代码来将我的结构中的值安装到我的窗口视图中,但我更喜欢使用Cocoa绑定.这就是他们的目的.

您不能将Cocoa绑定与Swift结构一起使用.

Cocoa绑定系统是在Key-Value Observing之上实现的,Key-Value Observing是通过创建一个子类来拦截发送给被观察对象的set< Property>:消息来实现的. Swift结构不能有子类,也不一定使用消息或函数调用来设置结构字段,因此通常无法拦截Swift结构字段的设置.

该消息抱怨缺乏KVC合规性,因为键值编码定义了消息名称的set< Property> :(和< property> getter)约定.

总结

以上是内存溢出为你收集整理的macos – 如何使用针对Swift结构的Cocoa绑定全部内容,希望文章能够帮你解决macos – 如何使用针对Swift结构的Cocoa绑定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1032225.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存