Подтвердить что ты не робот

Swift с использованием NSStatusBar statusItemWithLength и 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"
...

Проблема заключается в том, что метод statusItemWithLength в Swift исключает CGFloat, но NSVariableStatusItemLength определяется как CInt в Swift. Я вижу следующую ошибку:

'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!
    ...
}

Я что-то делаю неправильно? Как я могу это исправить?

4b9b3361

Ответ 1

Для бета-версии 1 и 2 вы можете вручную преобразовать NSVariableStatusItemLength из CInt в требуемый CGFloat, например:

let sm = bar.statusItemWithLength( CGFloat(NSVariableStatusItemLength) )

В Beta 3 NSVariableStatusItemLength теперь является CGFloat, но из-за ошибки компоновщика (ошибка) вы должны использовать -1 вместо NSVariableStatusItemLength и
-2 вместо NSSquareStatusItemLength

let sm = bar.statusItemWithLength( -1 )

Благодаря suzhi и gui_dos для выяснения этого!