枚举
- 1,枚举类型的定义
//不进行赋值
enum Sex{
case man
case woman
}
//给枚举累心刚赋值
enum direction: Int {
case east = 0
case weat = 1
case north = 2
case south = 3
}
enum type{
case get,post, put, delete
}
- 2,创建枚举和使用
let sex:Sex = .man//前面如果指定了具体类型,后面可以直接推导出来的话可以直接.出来
let sex01 = Sex.woman//这里前面没哟指定类型,后面需要写全
//如果是赋值的枚举类型,使用的时候除了上面的方式以外还一颗用下面方式:
let direction01 = direction(rawValue: 0)
let dir = direction01?.rawValue
结构体
1,结构体是由一系列具有相同类型或者不同类型的数据构成的数据集合
2,结构体是一种数据结构
3,结构体是值类型,在方法中传递的时候是值传递(swift对象跟结构体很相似,暂时还不了解两者的关系)
- 1,定义
struct Location {
var x:Double
var y:Double
func test()->Double{
return (x+y);
}
//如果在结构体内部更改了内部属性的值,需要在函数前加mutating关键字
mutating func changeX (changedValue:Double){
self.x += changedValue
}
//系统构造函数扩充
/*
init(Str:String){
let array = Str.components(separatedBy: ",")
let item1 = array[0]
let item2 = array[1]
// if let item1 = Double(item1) {
// self.x = item1
// }else{
// self.x = 0
// }
// if let item2 = Double(item2) {
// self.y = item2
// }else{
// self.y = 0
// }
//上面几行代码的简便写法(如果有值,解包,无值,则返回??后面的值)
self.x = Double(item1) ?? 0
self.y = Double(item2) ?? 0
}
*/
}
- 2,使用
var center = Location(x: 20, y: 20)
let rect = CGRect(x: 0, y: 0, width: 0, height: 20)
let range = NSRange(location: 0, length: 50)
- 3,给结构体扩充方法(在上面结构体中见方法)
center.changeX(changedValue: 20)
center.x
- 4,给结构体扩充构造函数(在上面结构体中见方法)
//系统默认提供一个赋值所有内部属性的构造函数