swift 2.0 语法 可选类型

import UIKit

/*:

可选类型(可以有值, 也可以没有值)

* 在OC中我们可以给一个对象类型变量赋值为nil或者一个对象, 而在Swift中如果想给一个变量赋值为nil那么必须明确指定为可选类型才可以, 也就是说普通变量是不能赋值为nil的

格式:  数据类型?

*  以后但凡看到init后面跟上一个?, 就代表初始化方法返回的值是可选的

注意:

* 可选类型是不能直接使用的, 如果向使用一个可选类型的值, 必须对可选类型进行解包 !

* 解包的含义: 告诉系统可选类型的变量, 一定有值, 如果可选类型的值没有值, 我们又进行了强制解包, 那么就会报错

建议

* 初学者学习Swift最最最蛋疼的问题就是? !这种语法, 刚开始可以借助Xocde编译器的提醒来完成? !, 以后写多了就知道什么时候写? , 什么时候写!

*/

let str = "http://www.520it.com/"

let url = NSURL(string: str)

print(url!)

let num1: Int? = 10

let num2: Int  = 20

// 注意: Swift不推荐我们随便使用强制解包

let sum = num1! + num2

if let temp = num1

{

let sum = temp + num2

}

/*:

可选绑定

* 专门用于解决强制解包的弊端

* 注意: 开发中如果想使用一个可选类型的值, 也不一定一定用可选绑定, 因为如果可选类型的值较多, 而又都属于同一个逻辑, 那么一不小心就会形成if嵌套

*/

let url2 = NSURL(string: str)

print(url2)

// 取出url2的值赋值给temp, 如果取到了值那么就可以进入if后面的大括号, 如果没有取到值(nil), 就不会进入if后面的大括号

if let abc = url2

{

print(abc)

}

let v1: Int? = 10

let v2: Int? = 20

let v3: Int? = 30

if let n1 = v1

{

if let n2 = v2

{

if let n3 = v3

{

let sum = n1 + n2 + n3

}

}

}

/*:

guard

* 作用: 类似可选绑定

* 只有条件为假(flase), 才会执行else后面大括号中的代码

格式

guard 条件表达式 else

{

// 条件为假就会执行

}

*/

func test()

{

guard let m1 = v1 else

{

print("没有值")

return

}

guard let m2 = v2 else

{

print("没有值")

return

}

guard let m3 = v3 else

{

print("没有值")

return

}

let sum = m1 + m2 + m3

}

test()

时间: 2024-10-24 23:44:53

swift 2.0 语法 可选类型的相关文章

[iOS] Swift 初学手册:可选类型 (Optionals)

原文地址:http://blog.callmewhy.com/2014/09/23/beginners-guide-optionals-swift/ 几周前 (译者注:原文发表于6月24日),苹果发布了一个全新的编程语言: Swift .从那时起,我一直在阅读Swift 官方手册,并且在 Xcode6 beta 上把玩学习.我开始喜欢上了 Swift 的简洁和语法.我和我的团队一起学习这门全新的语言,并且将它和 Objective-C 这个有着30年历史的老伙计进行对比.同时,我们也在努力探索如

swift 2.0 语法 分支

import UIKit // 注意: Swift中可以不写;号, 但是有一定的前提条件, 一行只有一句代码 //      如果一行有多句代码, 那么;还是必须写 // 注意: Swift变态的地方, 有时候运算符的左右如果没有写空格就会报错 let num = 10 /*: if * Swift中的if和OC中的if用法大致一致, 知识在细节上有一些细微的不同 不同点 * 1.OC中非0即真, 而Swift中没有这个概念, Swift中if的条件表达式必须是一个bool值 * Swift中提

swift 2.0 语法 循环

//: Playground - noun: a place where people can play import UIKit /*: for循环 * 基本用法和OC一致 * 条件表达式必须是bool类型的值 * 条件表达式的()可以省略 * 在OC中如果{}中只有一条语句, 那么{}可以省略, 而Swift不可以 */ for var i = 0; i < 10; i++ { print(i) } /*: 区间 半闭区间: 0..<10  包含头不包含尾 闭区间:   0...10  包

swift 2.0 语法 函数

//: Playground - noun: a place where people can play import UIKit /*: 函数 * 格式 func 函数名称(形参名称1: 形参类型, ...) -> 返回值类型 { // 逻辑代码 } * 没有参数没有返回值 * 没有参数有返回值 * 有参数没有返回值 * 有参数有返回值 */ // 没有参数没有返回值 // 如果函数的返回值是Void, 那么可以简写为() // 如果函数的返回值是(), 那么可以直接不写 func say()

swift 2.0 语法 字符串

//: Playground - noun: a place where people can play import UIKit /*: 字符串 * OC中的字符串是一个对象, Swift中的字符串是一个结构体 * OC中的字符串以\0结尾, Swift中的字符串不是以\0结尾 * Swift中的字符串比OC中的字符的性能要好 * Swift中的字符串支持遍历 */ let str = "abc\0def" print(str) // 遍历字符串 for c in str.chara

swift 2.0 语法 数组

import UIKit /*: 数组 * 格式 var arr:[Int] = [数值1, 数值2, 数值3] * 不可变数组  let  == NSArray * 可变数组    var */ let arr = [10, 11, 12] // 开发中用这种 let arr2: [Int] = [10, 11, 12] let arr3: Array<Int> = [10, 11, 12] // 注意: 如果向先定义在初始化, 那么就必须在定义的时候指定数据类型 var arr4:[Int

swift 2.0 语法 字典

//: Playground - noun: a place where people can play import UIKit /*: 字典 * 和OC的区别 * 1. {} 替换为 [] * 2. 去掉所有@ * 可变字典   var * 不可变字典 let */ var dict = ["name": "lnj", "age": 30] let dict2: [String : NSObject] = ["name":

Swift中的Optional类型 (可选类型)与强制解包 ? !

我们在swift的开发中会经常遇见?和! ,理解这两个符号深层次的内容对我们的开发是相当有利的: 目前网上对swift3.0的教程还相当的少,如果去搜索会发现早期的说法,在定义变量的时候,swift是不会给变量赋值初始值的,所以当你声明一个字符串变量的时候,var string:String   就会被系统报错,但是目前的swift版本却不报错了. 但是你要给一个字符串赋值未nil的时候,var string:String = nil 就一定是错误的   因为nil并不是一个字符串类型,而实际上

Swift(二,元组,可选类型,类型转化)

一,首先,元组是Swift中特有的,OC中没有元组相关类型,具体怎么用,看下面的例子吧 //1.使用元组来定义一组数据 let infoTuple = ("cjh",18,1.8) let nameTuple = infoTuple.0 print(nameTuple) let count = nameTuple.characters.count //2.1 普通元组的定义方式 let errorMsg = ("error",123) errorMsg.0 //2.