Swift使用NSStatusBar statusItemWithLength和NSVariableStatusItemLength

idm*_*ean 11 cocoa swift

我正在尝试从Swift中的状态栏编程主题重写以下代码.

NSStatusBar *bar = [NSStatusBar systemStatusBar];

theItem = [bar statusItemWithLength:NSVariableStatusItemLength];
[theItem retain];

[theItem setTitle: NSLocalizedString(@"Tablet",@"")];
...
Run Code Online (Sandbox Code Playgroud)

我的Swift代码到目前为止:

let bar = NSStatusBar.systemStatusBar()

let sm = bar.statusItemWithLength(NSVariableStatusItemLength)
sm.title = "Tablet"
...
Run Code Online (Sandbox Code Playgroud)

问题是statusItemWithLengthSwift 中的方法除外,CGFloat但在Swift NSVariableStatusItemLength中定义CInt.我看到以下错误:

'CInt' is not convertible to 'CGFloat'
Run Code Online (Sandbox Code Playgroud)

Xcode中的定义:

var NSVariableStatusItemLength: CInt { get }
var NSSquareStatusItemLength: CInt { get }

class NSStatusBar : NSObject {

    class func systemStatusBar() -> NSStatusBar!

    func statusItemWithLength(length: CGFloat) -> NSStatusItem!
    ...
}
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?我怎样才能解决这个问题?

Ato*_*mix 27

对于Beta 1和2,您可以手动将NSVariableStatusItemLength从CInt转换为所需的CGFloat,如下所示:

let sm = bar.statusItemWithLength( CGFloat(NSVariableStatusItemLength) )
Run Code Online (Sandbox Code Playgroud)

在Beta 3中,NSVariableStatusItemLength现在是CGFloat,但由于链接器错误(bug),您必须使用
-1而不是NSVariableStatusItemLength和
-2而不是NSSquareStatusItemLength

let sm = bar.statusItemWithLength( -1 )
Run Code Online (Sandbox Code Playgroud)

感谢suzhi和gui_dos搞清楚这一点!

  • 我发现了这个:https://devforums.apple.com/message/1001121#1001121使用"-1"或"-2"是现在的解决方法. (4认同)
  • 从Beta 6开始,此解决方案停止为我工作,构建错误为架构x86_64的未定义符号:"_ NSSquareStatusItemLength". (3认同)