swift---结构体

import UIKit


//结构体里面有函数有属性都可以
struct Student
{
    var name = "unknow"
    var age = 0
    var score = 0.0
    var ispass = false
    
//生成一个static静态的常量,这个常量就不属于任何实例而是属于自己这个结构体
    static let schoolName = "家里蹲大学"
    
    init() {
        
    }
    
    init(name:String,age:Int,score:Double) {
        self.name = name
        self.age = age
        self.score = score
        if self.score<60 {
            self.ispass = false
        }else{
            self.ispass = true
        }
    }
//    定义函数
    func getName() -> String {
        return self.name
    }
    func getAge() -> Int {
        return self.age
    }
    func getScore() -> Double {
        return self.score
    }
    func getIsPass() -> Bool {
        return self.ispass
    }
//    在函数中要修改自己结构体中的属性需要加关键字
    mutating func setScore(score: Double)  {
        self.score = score
        if score<60 {
            self.ispass = false
      
        }else{
            self.ispass = true
        }
    }
    
}

//这里注意结构体中有多少个init就会出现多少个init的构造方法第一个a就是空的那个init而b就是那个有name有age的
var a = Student()
print(a.name)
var b = Student(name: "小b", age: 18, score: 67)
print("姓名 = " + b.getName())
print("年龄 = " + String(b.getAge()))
print("分数 = " + String(b.getScore()))
print("是否通过考试 = " + String(b.getIsPass()))
print("学校 = " + Student.schoolName)


print("--------------------------------")

b.setScore(score: 10)
print("分数 = " + String(b.getScore()))
print("是否通过考试 = " + String(b.getIsPass()))


struct test1{
    var  age = 10
}

var t1  =  test1()
var t2 = t1
t2.age = 20
print(t2.age)
print(t1.age)
// 发现t2的age和t1的不同不会被关联到

//常量在实例调用修改不能修改
//计算属性

struct Person
{
    private var value = ""
    var name: String
    {
//        set这里可以不用写param参数可以直接使用newValue这是set给的一个默认参数
        set(param){
            print("set - " + param)
        }
        get{
            print("get")
            return value
        }
    }
    init() {
        
    }
}
var person = Person()
//设置属性的话就执行set
person.name = "swift"
//取属性的话就执行get
print(person.name)
//如何将这个person结构体里的name变成只读属性那就是删掉set保留get那么他就只能读不能修改


//属性观察willSet未来的值,didSet之前的值
struct sdjf {
    var address = ""
    
    var name: String = "unkown"
    {
//        set的时候获取到的未来的值可以不设参数默认是newValue
        willSet{
            address = newValue
            print("willset - " + newValue)
        }
//        获取到之前的值可以不设参数默认是oldValue
        didSet(old_Value){
            print("didSet - " + old_Value)
        }
    }
    
}
//没有初始化器那就有个默认的空init
var personjj = sdjf()
personjj.name = "heloo"

//下标语法
struct Personlll
{
    private var array:[String] = ["swift","ios","macos"]
    subscript(index: Int) -> String
    {
        set(new_value){
            print("\(index) - " + new_value)
            array.insert(new_value, at: index)
//            self.array[index] = new_value
        }
        get{
            return array[index]
        }
    }
}

var personkk = Personlll()
personkk[3] = "hello"
print(personkk[1])


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值