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()
swift 2.0 语法 可选类型的更多相关文章
- swift 2.0 语法 函数
//: Playground - noun: a place where people can play import UIKit /*: 函数 * 格式 func 函数名称(形参名称1: 形参类型, ...
- swift 2.0 语法 循环
//: Playground - noun: a place where people can play import UIKit /*: for循环 * 基本用法和OC一致 * 条件表达式必须是bo ...
- swift 2.0 语法 分支
import UIKit // 注意: Swift中可以不写;号, 但是有一定的前提条件, 一行只有一句代码 // 如果一行有多句代码, 那么;还是必须写 // 注意: Swift变态的地方 ...
- swift 2.0 语法 常量变量
import UIKit /*: 常量变量 * 常量: let * 变量: var 完整格式: * 修饰符(let/var) 常量/变量名称: 数据类型 */ let number: Int var ...
- swift 2.0 语法 字符串
//: Playground - noun: a place where people can play import UIKit /*: 字符串 * OC中的字符串是一个对象, Swift中的字符串 ...
- swift 2.0语法 元组
import UIKit /*: 元祖 * 可以将多个值保存在一起 * 格式: (数值1, 数值2, 数值3) * 特点: 元祖可以保存不同数据类型的值 * 用途: 在C/OC中如果一个函数想返回多个 ...
- swift 2.0 语法 数组
import UIKit /*: 数组 * 格式 var arr:[Int] = [数值1, 数值2, 数值3] * 不可变数组 let == NSArray * 可变数组 var */ l ...
- swift 2.0 语法 字典
//: Playground - noun: a place where people can play import UIKit /*: 字典 * 和OC的区别 * 1. {} 替换为 [] * 2 ...
- Swift中的Optional类型 (可选类型)与强制解包 ? !
我们在swift的开发中会经常遇见?和! ,理解这两个符号深层次的内容对我们的开发是相当有利的: 目前网上对swift3.0的教程还相当的少,如果去搜索会发现早期的说法,在定义变量的时候,swift是 ...
随机推荐
- JavaScript(十四)经典的Ajax
(function(){ //唯一向外暴露一个顶层变量 var myajax = window.myajax = {}; //作者.版本号信息 myajax.author = "maxwel ...
- Pyhton TestCase运行闪退与失败,原因不详。。。
把源码贴上来,希望某位大神可以指点迷津: """Unit test for odbchelper.py This program is part of "Div ...
- ListView用法
public class MainActivity extends Activity implements OnItemClickListener, OnScrollListener { privat ...
- 调度kettle使用taskctl我该怎么部署
转载自: http://www.taskctl.com/forum/detail_133.html 最近在QQ群看到有小伙伴在问用taskctl调度kettle,都要安装些什么呢?都支持哪些平台上的k ...
- Java 基础入门随笔(9) JavaSE版——文档注释
上节中写了一些static变量以及静态的方法的定义使用以及与非静态的差别,这节补充下: 如果在一个类中所有方法都为静态的,且无成员变量,这时候需要对对应的类进行限制该类无法创建对象,具体操作如下: p ...
- JSP参数传递兼EL表达式
1.浏览器?方式传递参数 /** 浏览器地址栏输入?方式传递参数 ?test=123 */ 可以用${param.test}方式输出 2.页面内部设置参数setAttribute /** JSP页面中 ...
- sql的for update
欢迎大家吐槽 oracle行级共享锁 通常是通过select … from for update语句添加的,同时该方法也是我们用来手工锁定某些记录的主要方法.比如,当我们在查询某些记录的过程中,不希望 ...
- 01Microsoft SQL Server
Microsoft SQL Server Microsoft SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越膝上型 ...
- Python orm基础
ORM 对象映射关系程序. 通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sq ...
- 你相信吗??Python把数字也当做对象!@@@对象,名称绑定,引用计数
本文学习自:http://blog.csdn.net/yockie/article/details/8474408 1.对象 Python中, 万物皆对象,包括12345等int常量.不信吗??用di ...