Swift 初入(二)

枚举和结构体

  1. 枚举
enum Rank: Int {
    case Ace = 1
    case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
    case Jack, Queen, King
    func simpleDescription() -> String {
        switch self {
        case .Ace:
            return "ace"
        case .Jack:
            return "jack"
        case .Queen:
            return "queen"
        case .King:
            return "king"
        default:
            return String(self.rawValue)
        }
    }
}

print(Rank.Ace)  // Ace
print(Rank.Two) // Two

// 因为Ace被设置成为1,swift中会对后面的值进行自增赋值
print(Rank.Two.rawValue) // 2 

// hashValue为当前值在enum中的索引值
print(Rank.Two.hashValue) //1

// enum中的方法适合所有enum中的值调用,并根据函数体返回内容
print(Rank.Two.simpleDescription()) // 2

// 如果 case Ace = "A" 改成赋值字符串的话
// enum Rank: String 枚举类型也要修改
// Two 这里返回的是 Rank 类型的数据
print(Rank.Two)
// Two 枚举值的原始值和他自身看起来是一样的,但是他们一个是字符串一个是Rank类型,不能  ===
print(Rank.Two.rawValue) 
  1. 结构体和类最大的区别是,结构体是传值,类是传引用

协议和扩展

  1. 类、枚举和结构体都可以实现协议

  2. 协议我一般用来做类或者view之间的通信

错误处理

  1. do catch 来处理错误,在do的scope中使用try

  2. 可以多个catch,catch不同的错误

  3. 可以使用try? 来将结果转换为可选的。有错就返回nil并且catch,没有错就返回一个可选值

  4. defer, 可以定义一段在函数返回前执行的代码,无论函数是否抛出错误

泛型

  1. 这个东西的好处大概是可以适配多数一个方法要处理某个数据结构,但是数据结构中数据类型不确定时的情况。
// 这里设置一个泛型 Item(其实就是一个值的类型)
// 这个Item具体的类型根据什么决定呢,根据参数列表的第一个参数的类型决定
// 下面能看到,repeating的参数类型是String,那么这里的Item就是String的一个 alias了
// 在这种情况下,这个函数会返回一个包含String类型的数组
func repeatItem(repeating item: Item, numberOfTimes: Int) -> [Item] {
    // 返回结果是一个String类型的数组
    var result = [Item]()
    for _ in 0..

比如要处理一个数组的元素换位置,可能面对的是包含String/Int/Double/Float 类型的数组,没有泛型的话可能要根据每个类型都写一个一模一样的方法,有泛型就可以只写一个方法来解决这个问题。

你可能感兴趣的:(Swift 初入(二))