我正在尝试从Swift中的状态栏编程主题重写以下代码.
NSStatusBar *bar = [NSStatusBar systemStatusBar]; theItem = [bar statusItemWithLength:NSVariableStatusItemLength]; [theItem retain]; [theItem setTitle: NSLocalizedString(@"Tablet",@"")]; ...
我的Swift代码到目前为止:
let bar = NSStatusBar.systemStatusBar() let sm = bar.statusItemWithLength(NSVariableStatusItemLength) sm.title = "Tablet" ...
问题是statusItemWithLength
Swift 中的方法除外,CGFloat
但在Swift NSVariableStatusItemLength
中定义CInt
.我看到以下错误:
'CInt' is not convertible to 'CGFloat'
Xcode中的定义:
var NSVariableStatusItemLength: CInt { get } var NSSquareStatusItemLength: CInt { get } class NSStatusBar : NSObject { class func systemStatusBar() -> NSStatusBar! func statusItemWithLength(length: CGFloat) -> NSStatusItem! ... }
难道我做错了什么?我怎样才能解决这个问题?
对于Beta 1和2,您可以手动将NSVariableStatusItemLength从CInt转换为所需的CGFloat,如下所示:
let sm = bar.statusItemWithLength( CGFloat(NSVariableStatusItemLength) )
在Beta 3中,NSVariableStatusItemLength现在是CGFloat,但由于链接器错误(bug),您必须使用
-1而不是NSVariableStatusItemLength和
-2而不是NSSquareStatusItemLength
let sm = bar.statusItemWithLength( -1 )
感谢suzhi和gui_dos搞清楚这一点!