我正在學習Swift。如何使用可可綁定對Swift結構
我大多工作在iOS的這些天,但我目前工作的一個小項目爲OS X
在OSX我喜歡使用Cocoa綁定從我的模型鏈接值的UI元素。它可以節省大量的膠水代碼。
我寫比較斯威夫特到C/Objective-C的性能的程序。我正在使用素數生成器作爲測試項目。
我已創建一個斯威夫特結構ComputeSettings
封裝運行在兩個斯威夫特和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
的模型關鍵路徑。
當我跑我的項目是失敗的異常:
無法設置(NSWindow)定義檢查屬性 (contentViewController)用戶:[的addObserver: forKeyPath:@ 「theComputeSettings.totalToCalculate」 選項:256 上下文:爲0x0]被髮送到一個對象不是KVC兼容的 「theComputeSettings」屬性。
相反,如果我綁定到虛擬財產foo
(所以模型的關鍵路徑設置爲self.foo
)它完美的作品。在這種情況下,我看到我的文本字段中顯示我的12
是否有某種方式來使用SWIFT結構,仍然可以得到Cocoa綁定工作的價值?我做了大量的谷歌搜索,但找不到任何東西。
我肯定能做到這一點的手工方式,並寫一堆膠水代碼,從我的結構安裝我的價值觀在我的窗口的觀點,但我寧願使用Cocoa綁定。這就是他們的目的。
好吧poo。這似乎是一個嚴重的限制。是否有可能在結構和/或結構本身的原始值上實現類別以映射swift didSet方法來調用符合KVO的集合方法?我正在寫500磅。的膠水代碼讀取/顯示值到我的領域。可可綁定是關於OS X開發的更好的事情之一。我真的更願意使用它們,即使這意味着要在前面進行一些繁重的工作。 – 2015-03-31 14:54:23
爲什麼ComputeResults需要一個結構?它實際上是你正在分析的代碼的一部分嗎? – 2015-03-31 16:29:18
它不**具有結構。這似乎是表示數據的最乾淨的方式。我想我會將它更改爲自定義數據對象,因爲對象上的屬性應該符合KVO標準,對吧? – 2015-03-31 17:55:21