您好我在swift中实现了NSSlider和NSSliderCell的子类,我想从NSSliderCell检查/检索_scFlags.isPressed属性,我发现有一个' hack'在Objective-C中从另一个类调用时执行它(如果你在Objective-C中继承NSSlider,则不需要这样做):
http://www.cocoabuilder.com/archive/cocoa/54913-nsslider.html
然而,在swift中,当我在API(AppKit - > NSSliderCell)中搜索时,我可以找到一个我认为是我需要的结构,除了内部的init()之外别无其他:
public struct __sliderCellFlags {
public init()
}
我甚至无法从子类中调用它。所有这些都显示为错误:
self.__sliderCellFlags
self._scFlags
super.__sliderCellFlags
super._scFlags
我错过了什么吗?有没有不同的方法来调用这些属性?
答案 0 :(得分:0)
使用Objective-C在NSSliderCell
上实现一个类别,该类别具有访问结构数据的属性并使用Swift中的属性。
@interface NSSlider (FlagsAccessor)
@property (nonatomic, readonly) BOOL isPressed;
@end
#import "NSSlider+FlagsAccessor.h"
@interface NSSliderCell (FlagsAccessor)
@property (nonatomic, readonly) BOOL isPressed;
@end
@implementation NSSlider (FlagsAccessor)
- (BOOL)isPressed
{
NSSliderCell *cell = self.cell;
return cell.isPressed;
}
@end
@implementation NSSliderCell (FlagsAccessor)
- (BOOL)isPressed
{
return self->_scFlags.isPressed == 1;
}
@end
然后从Swift中使用它只需调用self.isPressed
。 Here's a sample project
不要忘记在桥接标题中导入类别标题(当您将Objective-C代码添加到Swift项目时,Xcode会提示您创建桥接标题。)