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"]