Очистить привязки со структурами

#objective-c #cocoa #macos #struct #cocoa-bindings

#objective-c #cocoa #macos #структура #cocoa-привязки

Вопрос:

У меня есть класс модели, для которого имеет смысл иметь переменные экземпляра NSSize и NSPoint. Это прекрасно.

Я пытаюсь создать интерфейс редактирования для этого объекта. Я бы хотел привязаться к size.width и еще много к чему. Это, конечно, не работает.

Какое самое чистое, наиболее приемлемое для Cocoa решение этой проблемы? Конечно, я мог бы написать отдельные средства доступа для отдельных членов каждой используемой мной структуры, но, похоже, должно быть лучшее решение.

Ответ №1:

Вам не нужно создавать отдельные средства доступа для всех элементов, вы могли бы просто создать оболочки для интересующих вас типов, например:

 @interface SizeWrapper : NSObject {
    CGFloat width, height;
}    
@property (readwrite) CGFloat width, height;    
- (id)initWithSize:(NSSize)sz;    
- (NSSize)sizeValue;
@end

@implementation SizeWrapper
@synthesize width, height;

- (id)initWithSize:(NSSize)sz {
    if (self = [super init]) {
        width  = sz.width;
        height = sz.height;
    }
    return self;
}

- (NSSize)sizeValue {
    return NSMakeSize(width, height);
}
@end
  

Комментарии:

1. Это интересно, но я не уверен, как применить это к привязке текстового поля. Разве мне все равно не нужно было бы писать средства доступа?

2. @andyvn22: Удалил эту часть, поскольку оставалось бы еще немного работы.

3. Это все еще расстраивает меня (зачем тогда CGFloat!?) но я полагаю, что этого хватит.

4. @alex: Это довольно прямолинейно — добавил это выше.