//简单值
//test1
/**
let 定义常量,只能赋值一次,赋值后就不能在赋值
var 定义变量,可以多次赋值
*/
let a = 50;
var b = 40;
b = 30;
//在swfit中,创建一个常量或变量时,只提供一个值,不用定义类型,让编译器去判断其类型,若初始化时,没有初始化值(赋值),可以在创建的常量或变量后面加冒号再指定类型,即 let c : Float;
let c : Float;
c = 4.0;
//print(a,b,c);
//test2
/**
类型转换
*/
let a1 = "hello world";
let b1 = 60;
let c1 = a1 + String(b1);
//print(c1);
//将基础属性转换为string类型时,可以将值写在括号中,再在前面加一个反斜杠,即\(基础属性)来实现
let apples = 3;
let oranges = 5;
let string1 = "i have \(apples) apple";
let string2 = "i have \(apples + oranges) apple";
//print(string1 , string2);
//test3
/**
通过[]来创建数组或字典,通过index或key获取对应的值
*/
var array1 = ["sdhk",2,"3","4","5"];
array1[1] = "dsf";
let array2 = ["432", "asd", "g345"];
var dict1 = [
"1" : "a",
"2" : "b",
"3" : b1,
"4" : a1
];
//print(dict1);
//创建空数组和字典,以及初始化语法。
let array3 = [String]();
let dict2 = [String: Float]();
let minValue = UInt8.min;
let maxValue = UInt8.max;
//print(minValue, maxValue);
//test4
//元组
/**
元组把多个类型组合起来表示
*/
let httpError = (404, "not found", 3.123);
//print(httpError);
/**
可以将一个元组的内容分解成单独的常量和变量,然后正常使用
*/
//let (code, message) = http404Error;
//print(code);
//print(message);
/**
用下划线标记可以忽略不要获取的部分
*/
//let (code, _) = http404Error;
//print(code);
//可以通过下标获取元组中的元素,下标从0开始,类似数组
//print(httpError.0);
//可以给元组中单个元素命名,通过命名获取相应的元素,类似字典
let http200Status = (code : 200 , description : "success");
//print(http200Status.code);
//test5
//可选 optionals
let stringNumber = "123";
let number = Int(stringNumber);
//print(number);
//test6
//if语句及强制解析
/**
当确定可选包确实含值之后,你可以在可选的名字后面加一个感叹号 !来获取值,被称为可选值的强制解析
使用!来获取一个不存在的可选值会导致运行时错误,使用!来强制解析值之前,一定要确定可选包含一个非nil的值
*/
if number == 123 {
print(stringNumber,number!);
}else{
print(stringNumber);
}
//test7
//可选绑定optional binding
/**
如果stringNumber可以转换为int类型,if的判断就是true,反之false
*/
if let OBnumber = Int(stringNumber) {
print("\(stringNumber)可以绑定");
}else{
print("不可绑定");
}
//test8
//nil
/**
可以给可选变量赋值为nil来表示没有值
nil不能用于非可选的常量和变量,如果出现常量或变量处理值缺失的情况,需要将它们声明成对应的可选类型
如果声明一个可选常量或变量但是没有赋值,它们会自动被设置未nil;
在OC中nil是一个指向不存在对象的指针
在swift中nil不是指针,是一个确定的值,表示值缺失,任何类型的可选都可以被设置为nil,不只是对象类型
*/
var code1 : Int? = 404;
//print(code1);
code1 = nil;
//print(code1);
var code2 : Int?;
//print(code2);
//test9
//隐式解析可选
let string3 : String? = "hvsdk";
print(string3!);
let string4 : String! = "dsfsd";
print(string4);
if string4 != nil {
print(string4);
}
//test10
//断言
let age = -3;
//assert(age == 0);
//test11
//基础运算符
let (x,y) = (1,2);
print(x,y);
//加法运算也用于string的拼接
let string5 = "123";
let string6 = "456";
let string7 = string5 + string6;
print(string7);
//求余运算
print(-9 % 4);
//闭区间运算符
/**
闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间
闭区间运算符在迭代一个区间的所有值时是非常有用的
*/
for index in 1...5 {
print("\(index) * 5 = \(index * 5)");
}
//半闭区间
/**
半闭区间(a..<b)定义一个从a到b但不包括b的区间,之所以称为半闭区间,是因为该区间包含第一个值而不包含最后的值
半闭区间的实用性在于当你使用一个0始的列表(如数组)时,非常方便的从0数到列表的长度
*/
let names = ["Anna", "Alex", "Brian", "Jack"];
for i in 0 ..< names.count {
print(names[i]);
}