首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSStatusBar statusItemWithLength和NSVariableStatusItemLength的Swift

使用NSStatusBar statusItemWithLength和NSVariableStatusItemLength的Swift
EN

Stack Overflow用户
提问于 2014-06-03 20:53:16
回答 2查看 4.5K关注 0票数 11

我试图用Swift重写状态栏编程主题中的以下代码。

代码语言:javascript
复制
NSStatusBar *bar = [NSStatusBar systemStatusBar];

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

[theItem setTitle: NSLocalizedString(@"Tablet",@"")];
...

到目前为止我的Swift代码:

代码语言:javascript
复制
let bar = NSStatusBar.systemStatusBar()

let sm = bar.statusItemWithLength(NSVariableStatusItemLength)
sm.title = "Tablet"
...

问题是Swift中的statusItemWithLength方法不包括CGFloat,但是NSVariableStatusItemLength在Swift中被定义为CInt。我看到以下错误:

代码语言:javascript
复制
'CInt' is not convertible to 'CGFloat'

Xcode中的定义:

代码语言:javascript
复制
var NSVariableStatusItemLength: CInt { get }
var NSSquareStatusItemLength: CInt { get }

class NSStatusBar : NSObject {

    class func systemStatusBar() -> NSStatusBar!

    func statusItemWithLength(length: CGFloat) -> NSStatusItem!
    ...
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-03 22:56:17

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

代码语言:javascript
复制
let sm = bar.statusItemWithLength( CGFloat(NSVariableStatusItemLength) )

在Beta 3中,NSVariableStatusItemLength现在是一个CGFloat,但是由于链接器错误(bug),您必须使用

-1而不是NSVariableStatusItemLength和

-2而不是NSSquareStatusItemLength

代码语言:javascript
复制
let sm = bar.statusItemWithLength( -1 )

感谢苏芝和gui_dos的理解!

票数 27
EN

Stack Overflow用户

发布于 2014-07-09 17:48:29

作为解决办法,使用Beta 3版本,您可以直接传递Int常量。例如:

代码语言:javascript
复制
statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1) // NSVariableStatusItemLength

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24024723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档