第三周ios总结

第三周ios总结

字典与集合

1.字典

字典是存放键值对组合的容器
字典中每个元素都是由俩部分构成 冒号前面是键冒号后面是值

var dict: [String: String] = ["abacus": "算盘", "abnormal": "异常的", "hello" : "你好", "good": "好的"]

通过键获取对应的值(可空类型,因为给的键有可能没有与之对应的值)key--->value 如

print(dict["hello"]!)
print(dict["abcxyz"])

添加元素:

dict["shit"] = "狗屎"
dict["delicious"] = "好吃的"

删除元素:

dict.removeValueForKey("hello")

还有一种

dict["hello"]=nil

修改元素

dict["shit"] = "牛粪"

遍历字典中所有的值

for value in dict.values {
    print(value)
}

遍历字典中所有的键

for key in dict.keys {
    print("\(key) ---> \(dict[key])")
}

直接通过元组遍历字典中的值或键

for (key, value) in dict {
    print("\(key) ---> \(value)")
}

2.集合

创建数组

  var a :set = [1,2,4,1,2,5]
  var b :set = [2,4,8,9,6]

注意:数组里可以有相同的元素 集合里 输出时相同的元素会合并
添加元素

a.insert(100)

删除元素

a.remove(2)

交集(a和b都有的元素)

a.intersect(b)

并集(aheb的所有元素)

a.union(b)

差集(a有b没有的元素)

a.subtract(b)

判断b是不是a的子集

b.isSubsetOf(a)

判断a是不是b的超集

a.isSupersetOf(b)

判断俩个集合是否相交

a.isDisjioinWith(b)

函数

定义函数:func 函数名(参数列表) -> 返回类型 { 函数的执行体 }
Swift中函数的参数可以设定默认值
如果调用函数的时候没有给该参数赋值就直接使用默认值ru如:

func sayHello(personName: String, alreadyGreeted: Bool = false) -> String {
if alreadyGreeted {
        return "怎么又是你, " + personName + "!"
    }
    else {
        return "你好, " + personName + "!"
    }
}

调用函数:函数名(参数值)调用Swift的函数时, 在默认情况下从第二个参数开始需要写参数名

print(sayHello("王大锤", alreadyGreeted: true))

Swift中函数的参数列表可以是可变参数列表(参数的个数是任意多个)

func sum(nums: Int...) -> Int {
    var total = 0
    for num in nums {
        total += num
    }
    return total
}

print(sum())
print(sum(999))
print(sum(1, 2, 3))
print(sum(90, 82, 37, 68, 55, 11, 99))

可以使用元组(tuple)让函数一次返回多条数据

func minMax(array: [Int]) -> (min: Int, max: Int)? {
    if array.count == 0 {
        return nil
    }
    var currentMin = array[0]
    var currentMax = array[0]
    for value in array[1.. currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
}

if let b = minMax([23, 45, 99, 68, 72, 12, 55]) {
    print(b.min)        
    print(b.max)       
}
else {
    print("数组中没有元素!!!")
}

func swap(inout a: Int, inout _ b: Int) -> Void {
    (a, b) = (b, a)

inout - 输入输出参数(不仅将数据传入函数还要从函数中取出数据)

func createX(inout x: Int) {
    x = 1000
}

inout类型的参数前要加上&符号

var x = 1
createX(&x)
print(x)

尾随闭包也叫匿名闭包
在Swift中函数是一种类型
这也就意味着函数可以作为变量或常量的类型
同理函数也可以作为另一个函数的参数或返回值

func foo(array: [Int], fn: (Int, Int) -> Int) -> Int {
    var sum = array[0]
    for x in array[1..

当调用foo函数时第二个参数可以传什么?

  1. 所有自定义的(Int, Int) -> Int类型的函数
print(foo(a, fn: sum))
  1. 传入已有的二元运算符: +-*/%(因为运算符也是函数)
print(foo(a, fn: +))
  1. 传入匿名函数(闭包)
    3.1 完整的闭包写法
print(foo(a, fn: { (a, b) -> Int in
    return a + b
}))

3.2 省略掉类型和不必要的括号

print(foo(a, fn: { a, b in a + b }))

3.3 省略参数名

print(foo(a, fn: { $0 + $1 }))

3.4 尾随闭包

print(foo(a) { (a, b) -> Int in
    return a + b
})
print(foo(a) { $0 + $1 })

面向对象编程方法

面向对象的方法的步骤:
步骤1: 定义类(如果你要用的类苹果已经提供了就直接进入第2步)
定义类就可以创建出新的类型
如:学生类

class Student {
var name: String
    var age: Int
    init(name: String, age: Int) {
      self.name = name
       self.age = age
    }
    func eat() {
        print("\(name)正在吃饭.")
   }
}

步骤2: 创建对象(调用初始化方法)

let stu1 = Student(name: "骆昊", age: 35)

步骤3: 给对象发消息(通过给对象发消息来解决问题)

stu1.eat()

运算符重载(为自定义的类型定义运算符)

func add(other: Fraction) -> Fraction {
return Fraction(num: _num * other._den + other._num * _den, den: _den * other._den)
 }
func +(one: Fraction, two: Fraction) -> Fraction {
 return one.add(two)
}

计算属性(通过对存储属性做运算得到的属性)
通常获得某个计算出的值的方法都可以设计成计算属性

var area: Double {
        get { return M_PI * radius * radius }
    }
}

继承与多态

继承

继承: 从已有的类创建新类的过程
提供继承信息的称为父类(超类/基类)
得到继承信息的称为子类(派生类/衍生类)
通常子类除了得到父类的继承信息还会增加一些自己特有的东西
所以子类的能力一定比父类更强大
继承的意义在于子类可以复用父类的代码并且增强系统现有的功能
如:父类person类

class Person {
    var name: String
    var age: Int
    var gender: Gender
    
    init(name: String, age: Int, gender: Gender) {
        self.name = name
        self.age = age
        self.gender = gender
    }
    
    func eat() {
        print("\(name)正在吃饭.")
    }
}

子类teacher类

class Teacher: Person {
    var title: String
    
    init(name: String, age: Int, gender: Gender, title: String) {
        self.title = title
        super.init(name: name, age: age, gender: gender)
    }
    
    func teach(courseName: String) {
        print("\(name)\(title)正在教\(courseName).")
    }
}
多态

实现多态的关键步骤:

  1. 方法重写(子类在继承父类的过程中对父类已有的方法进行重写, 而且不同的子类给出各自不同的实现版本)
    父类方法:
func shout() {
        print("\(nickname)发出了叫声.")
    }

子类重写父类方法

override func shout() {
        print("\(nickname): 喵喵喵……")
    }
    ```




2. 对象造型(将子类对象当成父类型来使用)
可以通过if+as?将父类型安全的转换成子类型然后再调用子类特有方法

for pet in petsArray {
pet.eat()
pet.play()
pet.shout()

if let dog = pet as? Dog {
dog.keepTheDoor()
}
else if let cat = pet as? Cat {
cat.catchTheMouse()
}
else if let mis = pet as? Mistress {
mis.makeTrouble()
}
}

你可能感兴趣的:(第三周ios总结)