swift中变量声明 var、let、?、??、!的使用,以及?和!的区别

感觉swift使用的人越来越多了,所以打算跟着潮流总结一点东西,不完善或者有错误的地方,请指出,共同进步

1.var 和 let的使用

  • var声明的是变量,可以修改值(调用对象的set方法),举例说明
  • let声明的是常量,不可以修改值(不可调用对象的set方法),举例说明
var varA = 42
 varA = 43
 print(varA)//输出43 
知识兔
let varC = 36
 //varC = 46 报错,因为let申明的就是常量,不能修改值
 print(varC)
知识兔

2. ?的使用,如果对象没有赋值,默认为nil,举例说明  ??就是如果对象为nil,则使用后面的值代替,但是原变量不修改

var myString:String
print(myString)  //报错,因为myString没有赋值
知识兔
var myString:String?
print(myString)  //输出:nil
知识兔
var myString:String? = "myString"
  print(myString)  //输出:myString
知识兔
var myString:String?
var myString1 = myString ?? "BBBB";
print("myString1:\(myString1)    myString: \(myString)") // 输出:myString1:BBBB    myString: nil
知识兔

 3.!的使用,如果对象没有赋值,直接使用,会报错,可以使用!

var myString:String!
print(myString) //输出:nil
知识兔
var myString:String!
myString = "myString"
print(myString) //输出:myString
知识兔

4.?和!的区别,你会发现!和?在没有赋值的情况下打印出来的值都是nil,如果使用?声明的变量不赋值,直接调用对象的方法不执行,而使用!声明的变量不赋值,直接调用对象的方法运行会报错

var btn1: UIButton!
btn1.frame = CGRect.init(x: 10, y: 10, width: 10, height: 120);//报错
知识兔
var btn1: UIButton?
btn1?.frame = CGRect.init(x: 10, y: 10, width: 10, height: 120);//没有报错,这里不执行  btn1?这个问号必须加上,不然编译之前就报错了
知识兔

 

计算机