Я изучаю Swift.Как использовать привязки какао против структур Swift
я в основном работаю в IOS эти дней, но я в настоящее время работаю над небольшим проектом для OS X.
на OSX Мне нравится использовать какао привязки, чтобы связать значения из моей модели к элементам пользовательского интерфейса. Это экономит написание тонн кода клея.
Я пишу программу, которая сравнивает производительность 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: forKeyPath: @ опции "theComputeSettings.totalToCalculate" : 256 context: 0x0] был отправлен объекту, который не соответствует KVC для свойства «theComputeSettings» .
Если, вместо этого, я связываю с фиктивного свойством foo
(поэтому путем клавишной модели устанавливаются в self.foo
) он прекрасно работает. В этом случае я вижу, что мое текстовое поле отображает мое значение 12.
Есть ли способ использовать структуры Swift и по-прежнему получать привязки Cocoa? Я сделал довольно много googling, но ничего не могу найти.
Я могу сделать это вручную и написать кучу кода клея, чтобы установить мои значения из моей структуры в представления моего окна, но я бы скорее использовал привязки Cocoa. Для этого они нужны.
Well poo. Это кажется серьезным ограничением.Можно ли реализовать категории по примитивным значениям в структурах и/или самих структурах для сопоставления метода swift didSet для вызова метода набора, совместимого с KVO? Я нахожусь в середине письма 500 фунтов. кода клея для чтения/отображения значений в моих полях. Связывание какао - одна из лучших вещей в развитии OS X. Я бы очень сильно использовал их, даже если это означает, что вы делаете тяжелый подъем вперед. –
Почему ComputeResults должна быть структурой? Действительно ли это часть кода, который вы профилируете? –
У него нет **, чтобы быть структурой. Казалось, что самый чистый способ представить данные. Думаю, я поменяю его на пользовательский объект данных, так как свойства на объектах должны быть совместимы с KVO, не так ли? –