2020-11-09结构体struct

2020-11-09  本文已影响0人  脑子

用struct创建自己的类型

struct Sports {
    var name: String
}

var tennis = Sports(name: "网球")
print(tennis.name)

tennis.name = "🏀"
print(tennis.name)
//计算属性,olympicStatus这个属性必须通过运行代码来获得值的属性
struct Sports {
    var name: String
    var isOlympicSport: Bool
    
    var olympicStatus: String {
        if isOlympicSport {
            return "\(name)属于奥林匹克运动。"
        }else {
            return "\(name)不属于奥林匹克运动"
        }
    }
}

var tennis = Sports(name: "网球", isOlympicSport: true)
print(tennis.olympicStatus)
//属性观察者
//我们期望Swift在每一次 amount 改变的时候都打印信息,这里可以用到一个叫 didSet 属性观察者。它可以用于每一次 amount 改变之后运行代码;
//willSet 的属性观察者。它是在属性改变之前作用
struct Content {
    var task: String
    var amount: Int {
        didSet {
            print("\(task)已经完成了\(amount)%。")
        }
    }
}

var content = Content(task: "文件上传", amount: 0)
content.amount = 30
content.amount = 60
content.amount = 100
//方法
struct City {
    var population: Int
    
    func collectTaxes() -> Int {
        return population * 1000
    }
}

let hangzhou = City(population: 12_000_000)
hangzhou.collectTaxes()

//可变方法,当你想要改变属性值时,,需要在方法前使用 mutating 关键字
struct Person {
    var name: String
    
    mutating func makeAnonymous() {
        name = "匿名用户"
    }
}
//由于这个方法改变了属性值,所以Swift只会允许这个方法在变量型的 Person 实例上调用。
//let person = Person(name: "Yan") 这样就不可以
var person = Person(name: "Yan")
person.makeAnonymous()
//String 的属性和方法
let string = "好好学习,天天享受!abc"
//.count读取这个字符串里的字符数量,13
print(string.count)
//hasPrefix() 方法,可以用来检测字符串是否以特定字符开头,true
print(string.hasPrefix("好好"))
//用 uppercased() 方法把一个字符串转换成全大写的版本,好好学习,天天享受!ABC
print(string.uppercased())
//将字符串中的字母重新排序成一个数组,["a", "b", "c", "习", "享", "受", "天", "天", "好", "好", "学", "!", ","]
print(string.sorted())

//数组的属性和方法
var toys = ["Woody"]
print(toys.count)
//增加一个元素,可以使用 append() 方法,["Woody", "Buzz"]
toys.append("Buzz")
//用 firstIndex() 方法来定位元素在数组里的位置,0
toys.firstIndex(of: "Woody")
//以字母表顺序给数组的元素重新排序,["Buzz", "Woody"]
print(toys.sorted())
//移除数组里的一个元素,可以使用 remove(),Woody
toys.remove(at: 0)
print(toys)//["Buzz"]
上一篇下一篇

猜你喜欢

热点阅读