2015-04-30 51 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) 
相關問題