美文网首页
2020-11-09 struct静态属性和方法

2020-11-09 struct静态属性和方法

作者: 脑子 | 来源:发表于2020-11-09 05:02 被阅读0次
你可以创建自己的结构体类型,它们有自己的属性和方法。
你学习了存储属性,以及每一次通过临时计算得到值的计算属性。
当你希望在方法中修改属性时,需要把方法标记成mutating。
构造器是创建结构体时的特殊方法。默认情况下,你会得到一个逐一成员构造器。不过,如果你想要自行实现构造器的话,需要确保所有的属性都被赋值。
你可以在方法中用 self 常量来引用当前正在使用的结构体实例。
lazy 关键字告诉Swift你希望属性在第一次访问时才被创建。
可以利用static关键字在结构体的所有实例间共享属性和方法。
访问控制使得我们可以限制哪些代码能够访问属性和方法。
//构造器,必须确保构造器结束前所有的属性都被赋值
struct User {
    var username: String
    
    init(){
        username = "Anonymous"
        print("创建新用户!")
    }
}
//var user = User(username: "Ben")
var user = User()
user.username = "lang"

//self 引用当前实例,区分属性和参数
struct Person {
    var name: String
    init(name: String) {
        print("\(name)已经被占用了!")
        self.name = name
    }
}

//懒加载属性
struct FamliyTree {
    init() {
        print("创建族谱!")
    }
}
struct Person {
    var name: String
    lazy var familyTree = FamliyTree()
    
    init(name: String) {
        self.name = name
    }
}
var ed = Person(name: "Ed")
//假如某些情况我们并不需要用到某个人的族谱信息呢?我们可以在 familyTree 属性前添加 lazy 关键字,Swift将会在 familyTree 属性第一次被访问的时候才执行创建代码
//如果你想要看到 “创建族谱!” 这条信息被打印,你至少需要访问 familyTree 属性一次:
ed.familyTree
//输出“创建族谱!“
//静态属性和方法,在不同的结构体实例之间共享属性和方法
struct Student {
    //添加一个静态属性,用以存放班级学生的总数
    static var classSize = 0
    var name: String
    
    init(name: String) {
        self.name = name
        //每当我们创建一个新的 student 实例时,我们将这个属性的数值加1
        Student.classSize += 1
    }
}

let ed = Student(name: "ED")
let ben = Student(name: "BEN")
print(Student.classSize)//输出2
//private访问控制,私有属性,只能在结构体内访问
//public,它使得所有的其他代码都能够访问到目标属性或者方法
struct Person {
    private var id: String
    
    init(id: String) {
        self.id = id
    }
    
    func identify() -> String {
        return "ed的社保ID是\(id)"
    }
}
let ed = Person(id: "12345")

相关文章

网友评论

      本文标题:2020-11-09 struct静态属性和方法

      本文链接:https://www.haomeiwen.com/subject/dfgkbktx.html