Gibt es eine Möglichkeit, Systemverfügbarkeit in iOS zu erhalten (mit Swift)? Was ich brauche, ist Zeit zu messen, ohne sich darum sorgen zu müssen, dass der Benutzer die Zeit ändert. In Android gibt es eine elapsedCurrentTimeMillis()
, die die Anzahl der Millisekunden seit dem Start zurückgibt, aber jetzt brauche ich so etwas für iOS. Es gibt eine akzeptierte Antwort hier Getting iOS system uptime, that doesn't pause when asleep aber das ist für Objective C und ich brauche es für Swift und ich weiß nicht, wie man es umwandelt.Systemverfügbarkeit in iOS/Swift erhalten
Antwort
Als Sie nach einer reinen Swift-Lösung fragen, konvertierte ich den ObjC-Code aus der Antwort, die Sie erwähnten Getting iOS system uptime, that doesn't pause when asleep.
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())
Um es ein bisschen schöner, wir sysctlbyname
statt sysctl
verwenden:
// var mib: [Int32] = [CTL_KERN, KERN_BOOTTIME]
sysctlbyname("kern.boottime", &boottime, &size, nil, 0)
@ JAL Ich debuggte und fand das unterschiedliche Verhalten der Größe zwischen ObjC und Swift heraus. Es funktioniert jetzt! –
Yup, das funktioniert, zeigt den gleichen Wert wie Objective-C-Code-Version! Und ich kann sehen, dass ich mich schwer programmieren werde ... – TimSim
können Sie ObjC Code von Swift nennen:
print(SystemUtil().uptime());
eine ObjC Klasse schreiben wie die akzeptierte Antwort, die Sie erwähnt: Getting iOS system uptime, that doesn't pause when asleep.
SystemUtil.h
für Schnittstelle:
#import <Foundation/Foundation.h>
@interface SystemUtil : NSObject
- (time_t)uptime;
@end
SystemUtil.m
für die Implementierung:
#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
Und vergessen Sie nicht, ein <Project>-Bridge-Header.h
mit folgendem Inhalt enthalten, so dass Sie die ObjC Klasse von Swift verwenden (<Project>
ist Ihr Projektname):
#import "SystemUtil.h"
Das OP bittet um eine native Swift-Lösung. – JAL
Das funktioniert. Ich denke. Es zeigt plausible Nicht-Null-Betriebszeit. Für alle, die so dumm sind wie ich, müssen Sie nur die .h und .m Dateien in Xcode erstellen (Datei-> Neu-> Datei ...-> iOS-> Quelle) und sie in @donghua-li einfügen schrieb, und Bridge-Header.h wird automatisch erstellt (also einfach den #import hinzufügen) – TimSim
@TimSim Ich habe eine [pure-Swift-Lösung] ausgearbeitet (http://stackoverflow.com/a/36204651/4912403) . –
Dies ist eine Lösung in Swift 4.
var boottime = timeval()
var size = MemoryLayout<timeval>.stride
sysctlbyname("kern.boottime", &boottime, &size, nil, 0)
- 1. Welche API rufe ich an, um die Systemverfügbarkeit zu erhalten?
- 2. Position in onCreateViewHolder erhalten
- 3. Bildschirmgröße in Java erhalten
- 4. Umgebungsvariablenwert in Java erhalten
- 5. Richtungsvektor in Android erhalten
- 6. Ausnahmebedingungsdetails in Python erhalten
- 7. Benutzerinformationen in Crashlytics erhalten
- 8. Dateigröße in KB erhalten
- 9. erhalten Geltungsbereich in Richtlinie
- 10. Oberklassenname in ES6 erhalten
- 11. erhalten Verbindungsstärke in Phonegap
- 12. Arraylänge in Mongodb erhalten?
- 13. Erhalten
- 14. Erhalten "Unvollständige Antwort von der Anwendung erhalten" in Rails
- 15. Unicode-Zeichen in WM_KEYDOWN erhalten
- 16. KeyCode in GotFocus-Ereignis erhalten?
- 17. Wie Dateigröße in WinRT erhalten?
- 18. Eine Benutzereingabe erhalten In Ruby
- 19. Erhalten Sie Basisproduktbild in Magento
- 20. Erhalten Sie Wortstamm in Lucene
- 21. Systemspezifischen Zeilenumbruch erhalten in .net
- 22. erhalten spezifisch Eltern in jQuery
- 23. CakePHP3 erhalten Benutzer in default.ctp
- 24. Übergeordnetes Verzeichnis in Ansible erhalten?
- 25. Vorschaubilder in OpenSearchServer Suchergebnissen erhalten
- 26. Informationen erhalten in einem String
- 27. Erhalten Excel-Berechnungsmodus in ExcelDna
- 28. Fehler in Visual Studio erhalten
- 29. wie Nachricht in xmpphp erhalten
- 30. Automatisches Datum in iOS erhalten
Was ist nur ' NSProcessInfo.processInfo(). SystemUptime'? – JAL
Die Schlafzeit wird nicht berücksichtigt. Ich brauche einen Weg, zuverlässig zu messen, wie viel Zeit vergangen ist, auch wenn die App in der Zwischenzeit heruntergefahren wird und auch wenn der Benutzer die Zeit ändert. – TimSim