swift基础知识

一 可选类型

let age: Int?      
//类型后面加“?”表示可选类型,即:有可能没有值,没有值得时候是nil
//可选类型不能 直接使用,要在变量后面用"!"号解析之后才能使用
//对一个没有值的可选类型变量解析 会报错。
let grow = age! + 1;

//可选绑定,或者可以叫自动解析
if  let  aa = age {
//当age这个可选类型变量有值的时候会执行到这里。
}
//其实等价于
if  age != nil {
  let aa = age!;
}
let age: Int!       
//类型后面加“!”叫隐式可选类型,即:第一次赋值之后就一定会有值。
// 使用隐士可选类型变量时候后面不需要加!解析。

二 空和运算符 ??

//两个问号放一起叫做空和运算符,意思是如果左边的可选类型有值
//则取左边解析后的值,如果没值则用右边的备用值。
//如果  a是Int?   则b必须是 Int
let res = a ?? b
//其实这等同于
let res = a != nil ? a! : b;

三 区间运算符 ...

let range = 1...5
//a是个区间,可以用来遍历
for index in range {

}
for index in 1...5 {

}

四 switch

swift中的switch语句比较特别,
1.不需要用break来跳出,不会贯穿到下一个case,如果想要贯穿需要添加 fallthrough关键字。
2.可以匹配,单个值 多个值 区间 元组 和添加匹配条件

let time = 20;
var message = "";
switch time
{
    case 7://匹配单个值
        message = "It`s  time to get up.";
    case 8,12,18://匹配多个值
        message = "It`s time for eating.";
    case let x where x>18 && x<=24://匹配满足where条件的值
        message = "Happy time.";
    case 1...6://匹配区间
        message = "It`s time for rest.";
    default:
        message = "Keeping busy."
}
print(message);

//匹配元组
let somePoint = (1,1);
switch somePoint
{
case (0,0):
    print("原点")
case (_,0):
    print("x轴")
case (0,1):
    print("y轴")
case (-2...2,-2...2):
    print("在方框内")
default:
    print("在方框外")
}

五 if case

这个关键字是用来简化switch的,比如有的时候只用到switch的一个case,还要费劲巴拉的写搞个default,写一堆代码

enum Movement {
case Left
case Right
case Top
case Bottom
}
//下面三个方法效果一样
let aMovement = Movement.Left

//1
switch aMovement {
case .Left: print("left")
default: ()
}
//2
if case .Left = aMovement { print("left") }
//3
if aMovement == .Left { print("left") }

六 if case let

这个是 if case 和let的组合,也用来简化繁琐的switch匹配

enum CarBrand{
    case  BMW(name:String,Production:String)
    case  AUDI(name:String,Production:String)
    case  BENZ(name:String,Production:String)
}
let myCar = CarBrand.BMW(name: "宝马",Production: "德国") 

//这个时候想得到myCar这个枚举中关联的值 name,怎么获取
//当然可以用switch,但是有点麻烦,
switch myCar {
  case let CarBrand.BMW(name,Production):
    print("This car named \(name),from\(Production)")
  default: () // 不做任何处理
}

// if case let
 if case let CarBrand.BMW(name, Production) = myBrand{
     print("\(name),\(Production)")
}
//可以这么理解: 如果myBrand枚举变量是BMW,那么顺便声明两个常量并且让他们等于myBrand的两个关联值。

七 guard

if else 判空的一种简单易读方式

func greet(person: [String: String]) {
    //判断name有值才进行下面的print否则return
    guard let name = person["name"] else {
        return
    }

    //等同于
    var name = "";
    if  person["name"] == nil {
     return;
    }else {
      name = person["name"] !;
    }
     print("Hello \(name)")
}


你可能感兴趣的:(swift基础知识)