2015-04-30 24 views
0

我有一个increment: NSNumber并希望使用usleep函数。我尝试将其转换为:NSNumber在swift中使用seconds_t?

let value = increment.intValue 
let sec:useconds_t = value as! useconds_t 
usleep(sec) 

错误是前者投射总是失败。

编辑:要翻译从here采取以下Objective-C代码:

- (void)progressTask:(NSNumber *)increment{ 

    // get increment value 
    int _increment = [increment intValue]; 

    float progress = 0.0f; 
    while (progress < 1.0f) { 
     progress += 0.01f; 
     self.progressIndicator.progress = progress; 

     // increment in microseconds (100000mms = 1s) 
     usleep(_increment); 
    } 
} 

我怎样才能从NSNumberuseconds_t

+0

通常你只是使用初始化方法。例如'let sec = useconds_t(value.intValue)' –

+0

使用'NSTimer'。 – Sulthan

+0

@Sulthan您可否请求提供与NSTimer相同的示例? – confile

回答

1

useconds_t仅仅是UInt32一个类型别名,所以可以简单地做

let value = increment.unsignedIntValue // returns UInt32 
usleep(value) // no conversion necessary 

当然,你永远不应该在主UI线程上做到这一点。而且即使在后台线程上也有 (如GCD方法)。

+0

请看我编辑我想要实现的代码。什么会是更好的解决方案? – confile

+0

@ confile:我只是简单地看了一下这段代码。似乎MBProgressHUD(这里使用的)在后台线程上调用该方法,所以它可能是好的。 (否则它在Objective-C中不能正常工作)。但是我对这个*项目没有经验,所以我不能给出一个快速的建议,以不同的方式做。 –

+0

我应该使用睡眠还是应该跳过它? – confile

0

您不能在Swift中投射不同类型的数字,但可以从Int32初始化useconds_t。

let value = increment.intValue 
let sec: useconds_t = useconds_t(value) 
usleep(sec) 
0

好,我做过测试,所以我知道它现在的工作:

let num = NSNumber(int: 1) 
let secs = useconds_t(num.intValue) 
相关问题