如何为Swift类的每个实例生成唯一递增ID
给Robot类实现唯一递增ID的简单方案
嘿,你可能记错啦——Swift 4及后续版本是完全支持类存储属性的!直接用这个特性就能轻松实现你要的功能,根本不用绕弯子。
下面是最直接的实现代码:
class Robot { // 类级别的私有存储属性,用来追踪当前已分配的最大ID private static var maxId = 0 // 每个实例的唯一ID,初始化后不可修改 let id: Int init() { // 初始化时先递增maxId,再赋值给当前实例的id Robot.maxId += 1 self.id = Robot.maxId } } // 测试一下效果 let r1 = Robot() print(r1.id) // 输出 1 let r2 = Robot() print(r2.id) // 输出 2 let r3 = Robot() print(r3.id) // 输出 3
补充说明:
- 这里用
static var而不是class var,是因为static属于“final”类属性,不需要子类重写;如果你的Robot类需要被继承,且子类需要自定义ID生成逻辑,可以把static改成class,不过记得子类必须重写这个属性。 - 把
maxId设为private是为了保证外部代码不能随意修改它,避免ID混乱,符合封装原则。
如果之前查到的资料说Swift只有类级计算属性,那大概率是早期Swift版本(比如Swift 1.x)的过时内容了,Swift 2及以后就已经支持类存储属性,Swift 4当然完全没问题~
内容的提问来源于stack exchange,提问作者Maury Markowitz
相关产品推荐
相关产品推荐

