重新拾起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()