可选类型
nil是一个特殊的类型了和真实类型不匹配是不能赋值nil的 但开发中需要赋值nil,因此出可选类型
//常规 不常用
var name :Optional = nil
//语法糖
var name : String? = nil
//赋值
name = “a”
//取出可选类型中的值
print(name as Any)
//强制解包 危险操作 如果可选类型为nil 会崩
print(name!)
//建议强制解包前判断是否为nil
if name != nil {
print(name!)
}
//可选绑定 每次用到name都需要先解包
if let tempName = name { // 1.判断name是否有值 2.如果name有值 系统自动将name解包并赋值给tempName
print(tempName)
}
//常用写法 就近原则
if let name = name {
print(name)
}
//例子 通过字符串创建url
//let url : NSURL = NSURL(string: “www.xxx.com”) //报错 因为后面返回的事可选类型 并不是nsurl 当然你可以不指定类型
let url = NSURL(string: “www.xxx.com奥术大师”);
//let url : NSURL? = NSURL(string: “www.xxx.com”)
//let request : NSURLRequest? = NSURLRequest(url: url! as URL) //非常危险 ,强制解包 当网址有中文的时候 nil 就会崩
if let url = url {
let request = NSURLRequest(url: url as URL)
}
建议Xcode跑跑就知道了 不截图 为了方便大家粘贴复制
函数
相当于oc的方法
func 函数名(参数列表)-> 返回值类型{ //(多参数用","分割)
代码块
return 返回值
}
//没有参数 没有返回值
func about() {
print(“a”)
}
about()
func about1() -> Void {
print(“b”)
}
about1()
//没有参数 有返回值
func about2() -> String {
print(“c”)
return “d”
}
about2()
//有参数 没有返回值
func about3(str : String) {
print(str)
}
about3(str: “e”)
func callTel(number : String) {
print(“callTel:” + number)
}
callTel(number: “10086”)
//有参数 有返回值
func sum(num1 : Int, num2 : Int) -> Int {
return num1 + num2
}
sum(num1: 10, num2: 20)
//注意:默认参数 点菜直接做菜 不点菜默认上米饭
func cook(cookName : String = “米饭”) -> String {
return cookName
}
cook(cookName: “肉丝”)
cook()
//注意:可变参数 例如多个数相加
func sumM(num : Int…) -> Int {
var result = 0
for n in num {
result += n
}
return result
}
sumM(num: 10,20,30)
sumM(num:20,30)
var A = 20
var B = 30
func swapNumB(A : Int, B : Int) { //3.0 就在参数中废弃了var
var A = A
var B = B
let C = A
A = B
B = C
print(“A = (A) B = (B)”)
}
swapNumB(A: A, B: B)
print(“A = (A) B = (B)”)
func swapNum( A : inout Int, B : inout Int) {
let temp = A
A = B
B = temp
}
swapNum(A: &A, B: &B)
print(“A = (A) B = (B)”)
//函数的嵌套使用
func test() {
func test1() {
print(“test1”)
}
print(“test”)
test1()
}
test()