有沒有辦法讓iOS中的系統正常運行時間(使用Swift)?我需要的是測量時間,而不必擔心用戶改變時間。在Android中有一個elapsedCurrentTimeMillis()
,它返回自引導以來的毫秒數,但現在我需要類似iOS的東西。這裏有一個可接受的答案Getting iOS system uptime, that doesn't pause when asleep但這是Objective C的,我需要它的Swift,我不知道如何轉換它。在iOS/Swift中獲取系統正常運行時間
回答
當你問純粹的Swift解決方案時,我從你提到的答案Getting iOS system uptime, that doesn't pause when asleep轉換了ObjC代碼。
func uptime() -> time_t {
var boottime = timeval()
var mib: [Int32] = [CTL_KERN, KERN_BOOTTIME]
var size = strideof(timeval)
var now = time_t()
var uptime: time_t = -1
time(&now)
if (sysctl(&mib, 2, &boottime, &size, nil, 0) != -1 && boottime.tv_sec != 0) {
uptime = now - boottime.tv_sec
}
return uptime
}
// print(uptime())
爲了使它有點漂亮,我們可以使用的sysctlbyname
代替sysctl
:
// var mib: [Int32] = [CTL_KERN, KERN_BOOTTIME]
sysctlbyname("kern.boottime", &boottime, &size, nil, 0)
@JAL我調試並找出了ObjC和Swift之間sizeof的不同行爲。它現在有效! –
是的,這個工程,顯示與Objective-C代碼版本相同的值!而且我可以看到我將很難編程... – TimSim
您可以從斯威夫特調用ObjC代碼:
print(SystemUtil().uptime());
寫ObjC類像你提到的接受的答案:Getting iOS system uptime, that doesn't pause when asleep。
SystemUtil.h
的接口:
#import <Foundation/Foundation.h>
@interface SystemUtil : NSObject
- (time_t)uptime;
@end
SystemUtil.m
實施:
#import "SystemUtil.h"
#include <sys/sysctl.h>
@implementation SystemUtil
- (time_t)uptime
{
struct timeval boottime;
int mib[2] = {CTL_KERN, KERN_BOOTTIME};
size_t size = sizeof(boottime);
time_t now;
time_t uptime = -1;
(void)time(&now);
if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 && boottime.tv_sec != 0) {
uptime = now - boottime.tv_sec;
}
return uptime;
}
@end
而且不要忘了包括一個<Project>-Bridge-Header.h
有以下內容,以便您可以從斯威夫特使用ObjC類( <Project>
是您的項目名稱):
#import "SystemUtil.h"
這是斯威夫特4
var boottime = timeval()
var size = MemoryLayout<timeval>.stride
sysctlbyname("kern.boottime", &boottime, &size, nil, 0)
- 1. 在Java中獲取系統正常運行時間
- 2. 系統正常運行時間
- 3. PHP - 獲取時間獨立於它正在運行的系統
- 4. 如何在Windows 7中檢查系統正常運行時間
- 5. 更改Linux時間來欺騙系統正常運行時間
- 6. 最快的方式獲得系統正常運行時間在Python在Linux中
- 7. 獲取Windows正常運行時間
- 8. 獲得iOS系統正常運行時間,在睡眠時不會暫停
- 9. 如何在過去24小時內獲得系統正常運行時間
- 10. 系統正常運行時間和內存屏障
- 11. 通過VBA(訪問/ Excel)中獲取系統運行時間
- 12. 在VCS中獲取系統時間
- 13. 在Vxworks中獲取系統時間
- 14. 在iPhone中獲取系統時間
- 15. 我打電話來獲得系統正常運行時間的API?
- 16. 獲得程序正常運行時間
- 17. 從RTC獲得正常運行時間
- 18. 正在運行的系統
- 19. 如何從系統中獲取時間?
- 20. 獲取系統時間在VB.NET
- 21. linux正常運行時間
- 22. 如何使用C#中的正則表達式從HTML中提取系統正常運行時間
- 23. 在android中獲取運行時異常
- 24. 我如何獲得Linux系統的正常運行?
- 25. 獲取應用程序正常運行時間
- 26. 如何在系統運行時獲得真正的CPU頻率?
- 27. 如何在Java中獲得UNIX正常運行時間?
- 28. 獲取運行時異常
- 29. 在C++運行時獲取當前操作系統
- 30. 獲取時間在iOS中「運行」
什麼只是一個解決方案' NSProcessInfo.processInfo()。systemUptime'? – JAL
這沒有考慮到睡眠時間。我需要一種方法來可靠地衡量已經過了多少時間,即使應用程序在此期間關閉了,即使用戶改變了時間。 – TimSim