簡體   English   中英

Swift使用NSStatusBar statusItemWithLength和NSVariableStatusItemLength

[英]Swift using NSStatusBar statusItemWithLength and NSVariableStatusItemLength

我正在嘗試從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"
...

問題是Swift中的statusItemWithLength方法除了CGFloatNSVariableStatusItemLength在Swift中被定義為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搞清楚這一點!

作為一種解決方法,使用Beta 3版本,您可以直接傳遞Int常量。 例如:

statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1) // NSVariableStatusItemLength

https://github.com/gui-dos/Guigna/blob/181f9db1056dece888dc29424cc2da79f8f284e3/Guigna-Swift/Guigna/GuignaAppDelegate.swift#L138

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM