gpt4 book ai didi

swift - 如何验证属性的传入数据?

转载 作者:行者123 更新时间:2023-11-28 12:16:11 25 4
gpt4 key购买 nike

在我的模型中,我有一个包含一些全局属性和方法的单例类。我想我已经正确设置了类,但我需要一种方法来验证属性的传入数据。我正在尝试使用 getset 但它们似乎需要返回 void。我不能使用 init,因为它是一个单例。
我错过了什么吗?

final class Globals {

private init(){}

static let sharedInstance = Globals()

//MARK: Properties
private var _peopleCount: Int!

var peopleCount: Int! {
get {
return _peopleCount
}
set(newPeopleCount) {
guard newPeopleCount > 0 else {
return nil // can't return nil here
}
}
}
}

最佳答案

除非有充分的理由,否则不应将变量定义为隐式展开的可选值。

您的直接错误是您不能在 setter 中返回值,您需要将值分配给那里的变量。如果要通过 peopleCountnil 来标记无效值,请将 peopleCount 定义为 Int? 并分配给它nil 当检查失败时。

final class Globals {

private init(){}

static let sharedInstance = Globals()

//MARK: Properties
private var _peopleCount: Int?

var peopleCount: Int? {
get {
return _peopleCount
}
set(newPeopleCount) {
if let newValue = newPeopleCount, newValue > 0 {
_peopleCount = newValue
}
}
}
}

对于大多数用例,不需要私有(private)支持变量,您可以在分配值之前使用 didSet 检查值。感谢@LeoDabus 在评论中提出的想法。

var peopleCount: Int? {
didSet {
if let newValue = peopleCount, newValue > 0 {
peopleCount = newValue
} else {
peopleCount = oldValue
}
}
}

关于swift - 如何验证属性的传入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46502733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com