swift学习第一天:正式学习swift,可能有很多问题不怎么明白,如有问题,请指出!O(∩_∩)O谢谢
1.swift中定义一个变量,系统不会自动赋值,变量不会分配到内存,所以事先初始化!
2. 注释语句:
//MARK: + 说明
//类似oc中的#pragma mark
//TODO: + 说明:
//如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明。
//FIXME: + 说明:
//如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。
3.关于“!”强解析,变量为nil崩溃的问题 override func viewDidLoad() {
view.backgroundColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
/**
* 创建空字符串
* 建议使用“?”判断解析,当此变量没有值得时候,打印的话不会crash
* 若使用“!”强制解析,当变量没有值的时候,打印的话,会crash
*/
let c:String? = "my have"
let d:String? = "a dag"
print(c! + d!);
//但实际开发中当变量为nil的时候,强行解包都会发生崩溃!
// text1(A: "my", B: nil)
//iflet
text2(A: "my", B: nil)
// guard let
text3(A: "my", B: nil)
}
//text1按照常规方法解决,“!”强行解包;然而当A 或者B为空的时候就会崩溃;因为用一个“!”时,程序猿都要对他进行管理,所以开发过程尽量避免少用“!”进行解包!
func text1(A:String?,B:String?){
print(A! + B!)
}
//MARK:- 方法2
//用到了if let 语句,将A进行了一次赋值给A,B给B;这样就避免了解包为nil带来得崩溃
func text2(A:String?,B:String?){
if let A = A,let B = B {
//使用的A 或 B时候会发现有2个A,2个B;string类型的只作用于 此{}内
print(A + B)
}else{
print("A 或 B 为空")
}
}
//MARK:- 方法3
//用guard let 也可以巧妙避开解包带来得困扰,guard let 的用法和iflet相反; 如果 A 或 B 为空 执行 reture{},不会进行接下来得代码,
//guard let 相对 if let 在实际开发更实用,可以有效的减少代码层次,增加可读性!比如登陆界面 有效判断账号或密码是否为空,为空就终止
func text3(A:String?,B:String?){
guard let A = A ,let B = B else { return print("A 或 B 为空") }
print(A + B)
}