Мне нужны определенные типы системной информации, доступные для настройки моего приложения.Я хочу достичь этого, имея модельный класс, который делает информацию доступной.Я знаю, как получить нужную информацию, но я изо всех сил стараюсь сохранить эту собранную информацию в свойствах моего модельного класса.
я хочу иметь возможность:
let sysInfoModel = SysInfoModel()
let installedOsVersion = sysInfoModel.osVersion
Класс модели должен быть создан из vieController, которому нужна эта информацияустановить.Я думаю, что вся моя попытка неверна, чтобы достичь такой цели.Как правильно это сделать?
class SysInfoModel {
// Properties
let macModel: String?
let osVersion: String?
// Initialization
init() {
if let actualModel = getMacModel() { //ERROR: 'self' used in method call 'getMacModel' before all stored properties are initialized
self.macModel = actualModel
} else {
macModel = "Hardware model not found"
}
if let actualOsVersion = getOsVersion() { // ERROR: 'self' used in method call 'getOsVersion' before all stored properties are initialized
osVersion = actualOsVersion
} else {
osVersion = "OS Version not available"
}
}
// Returns the hardware model identifier as a string
func getMacModel() -> String? {
var modelIdentifier: String?
let service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice"))
if let modelData = IORegistryEntryCreateCFProperty(service, "model" as CFString, kCFAllocatorDefault, 0).takeRetainedValue() as? Data {
modelIdentifier = String(data: modelData, encoding: .utf8)
}
IOObjectRelease(service)
return modelIdentifier
}
// Returns the OS Version as a String
func getOsVersion() -> String? {
let osVersion: OperatingSystemVersion = ProcessInfo.processInfo.operatingSystemVersion
let osVersionString = String("\(osVersion.majorVersion).\(osVersion.minorVersion).\(osVersion.patchVersion)")
return osVersionString
}
}
Обновление после ответа Мэтта:
// Properties
var askSystem: AskTheSystem
let macModel: String?
let osVersion: String?
init() {
askSystem = AskTheSystem()
if let actualModel = askSystem.getMacModel() {
self.macModel = actualModel
} else {
macModel = "Hardware model not found"
}
if let actualOsVersion = askSystem.getOsVersion() {
osVersion = actualOsVersion
} else {
osVersion = "OS Version not available"
}
}
Я так и сделал, есть возможность поставить функции getMacModel()
& getOsVersion()
в отдельном классе под названием AskTheSystem
.Создайте его в SysInfoModel
.Это работает, но это хорошая практика?я не вижу смысла в добавлении другого класса только для этих функций?Как правильно это сделать?