重新拾起Swift第一天

let声明常亮
var声明变量
有自动推断的功能,也可以指明数据类型

let explicitDouble: Double = 70

任何类型的数据不会被隐式转换成其他类型的数据,就像这里的width,不会像JS直接回转成String,

let label = "The width is"
let width = 94
let widthLabel = label + width

error: binary operator '+' cannot be applied to operands of type 'String' and 'Int'

正确的做法

let label = "The width is"
let width = 94
let widthLabel = label + String(width)

字符串的快捷转换符号‘()’

let time:Float = 8

let hello = "Good morning ! Time is AM \(time)"

数组字典的初始化

//数组

var animals = ["pig","dog","cat","rubbit"]
let pig = animals[0];


//字典
var dictionary = [
    "xiaoming" : "10",
    "xiaohong" : "12"
];

var xiaoming = dictionary["xiaoming"]

空数组,空字典的创建,一定要指定数据类型

//空数组,空字典初始化
var arr = [String]();
var dic = [String:Float]();

也可以自动推理出数据类型,因为上面的代码已经指明了animals和dictionary的数据类型了

//如果可以推断出来
animals = []
dictionary = [:]

可选数据类型 if let optional = value {
}
如果value不为nil
可选数据的定义以及初始化

var optional:String?
var optional1:String? = “abc”

总结:
Swift中的数据只要被定义出来就要给一个数据类型(Int,String, Float)不必给一个确切的值,在使用这个数据的时候就必须要有值,或者是可选类型(可为nil)例如

var abc         //是错的
var cde:Int     //是对的

var abc:Int
print(abc)      //是错的
var abc:Int?
print(abc)      //是对的
var abc = 10    //自动推导abc是Int型数据
print(abc)      //是对的

可选值的默认值 使用 ?? 连接,如果可选类型的数据为nil。

let myName:Int? = nil
let moren:String = "abc"
print(myName ?? moren)

Switch语句
Swift中Switch语句可以判断的值可以是任意类型,每个case结束也不必加上break,Switch必须完整,default不能缺省

let vegetable = "red pepper"
 switch vegetable {
 case "celery":
     print("Add some raisins and make ants on a log.")
 case "cucumber", "watercress":
     print("That would make a good tea sandwich.")
 case let x where x.hasSuffix("pepper"):
     print("Is it a spicy \(x)?")
 default:
     print("Everything tastes good in soup.")
 }

遍历字典,使用 for in 语句。

var largest:Int?
var largestKind:String?

for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest ?? 0 {
            largest = number;
            largestKind = kind;
        }
    }
}

print(largest!)
print(largestKind!)

while语句的使用

var total:Int = 1
while total < 100 {
    total = total + total;
}
total

var total2:Int = 100
repeat{
    total2 = total2 + total2;
}while total2 < 100
total2

for循环的使用, ..< 包含左不包含右 …包含左包含右

var total3:Int = 1;
for i in 1..<5 {
    total3 = i;
}

函数和闭包
使用func来声明一个函数
->表示返回值类型

func greetFun(person:String, day:String) -> String{
    return "Good Morning \(person), today is \(day)";
}

greetFun(person: "xiaoming", day: "Monday")

使用参数标识替换原有参数, _是在参数可以省略的情况下使用, on就替换原来的参数

func greetFun2(_ person:String, on day:String) -> String{
    return "Good Morning \(person), today is \(day)"
}

greetFun2("xiaoming", on: "Monday")

返回多个参数的函数,返回元祖类型的数据,元祖类型的数据可以使用()包起来,使用的时候可以使用变量的名称,或者脚标来直接获取

func toolFunc(Arr:[Int]) -> (sum:Int, max:Int, min:Int){

    var max = Arr[0];
    var min = Arr[0];
    var sum = 0;
    
    for num in Arr {
        if num > max {
            max = num;
        }
        if num < min {
            min = num;
        }
        sum += num;
    }
    
    return (sum, max, min)
}

var result = toolFunc(Arr: [12, 32, 1, 21, 43, 21, 54])
result.sum
result.max
result.min
result.0

在Swift中参数个数可以不固定

func sumFunc(numbers:Int...) -> Int{
    var sum = 0;
    for number in numbers{
        sum += number;
    }
    return sum;
}

var sum = sumFunc(numbers: 1,4,3,5,7)

函数可以嵌套使用,内部函数可以是用外部函数里的局部变量,但是外部函数不能使用内部函数里的句不变量

func returnFifteen() -> Int{
    var y = 10;
    func add() -> Int{
        y += 5;
        return y
    }
    add()
    return y;
}

returnFifteen()

你可能感兴趣的:(重新拾起Swift第一天)