实现思路
- 定义一个属性包装器,在
wrappedValue
的set
方法中对输入的年龄进行范围检查。
- 为了保证在不同视图控制器间传递数据的一致性,可以使用单例模式或者
UserDefaults
等方式来存储和共享数据。这里以单例模式为例,将年龄数据存储在单例中,不同视图控制器通过单例来获取和设置年龄,确保数据的一致性。
核心代码
// 属性包装器
@propertyWrapper
struct AgeRangeValidator {
private var age: Int?
var wrappedValue: Int {
get {
age ?? 0
}
set {
if newValue >= 18 && newValue <= 100 {
age = newValue
} else {
print("年龄不在有效范围内")
}
}
}
}
// 单例类,用于在不同视图控制器间共享年龄数据
class AgeManager {
static let shared = AgeManager()
@AgeRangeValidator var age: Int
private init() {}
}
// 在视图控制器中使用
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
AgeManager.shared.age = 25
print("当前年龄: \(AgeManager.shared.age)")
}
}