MST

星途 面试题库

面试题:Swift属性包装器:复杂场景应用

假设你正在开发一个iOS应用,需要对用户输入的年龄属性进行管理,要求年龄必须在18到100之间。请使用属性包装器实现该功能,并且要考虑到属性包装器在不同视图控制器间传递数据时的一致性问题,阐述你的实现思路并给出核心代码。
35.0万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义一个属性包装器,在wrappedValueset方法中对输入的年龄进行范围检查。
  2. 为了保证在不同视图控制器间传递数据的一致性,可以使用单例模式或者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)")
    }
}