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是 ...
随机推荐
- Python多线程爬图&Scrapy框架爬图
一.背景 对于日常Python爬虫由于效率问题,本次测试使用多线程和Scrapy框架来实现抓取斗图啦表情.由于IO操作不使用CPU,对于IO密集(磁盘IO/网络IO/人机交互IO)型适合用多线程,对于 ...
- oracle 用sql语句管理数据库
基础sql语句 创建数据库 :create database database_name; 创建表:create table(字段名 字段类型 字段为空约束 ,字段名 字段类型 字段为空约束,,,, ...
- @objc and dynamic
@objc and dynamic Objective-C runtime visibility and the depths of dynamic dispatch in the modern ...
- git学习(3)----git 新建分支并提交本地代码到远程分支
一.步骤 1.在gitlab上创建一个issue,issue一般来说是版本发布说明.比如本次更新了什么功能,修复了什么bug什么的. 2.然后在本地创建一个branch,或者直接在gitlab上申请m ...
- [转]SAS盘和SATA盘之间的区别
很多人一提到SAS盘和SATA盘之后,首先想到的是接口方面的区别,SAS的接口速度比SATA高很多,所以认为SAS盘要比SATA盘快,性能高.其实,接口方面的区别并不是主要的,只是很小的一方面.那么, ...
- pandas文本处理
import pandas as pd import numpy as np s = pd.Series([', np.nan, 'hj']) df = pd.DataFrame({'key1': l ...
- python正则表达式提取字符串
用python正则表达式提取字符串 在日常工作中经常遇见在文本中提取特定位置字符串的需求.python的正则性能好,很适合做这类字符串的提取,这里讲一下提取的技巧,正则表达式的基础知识就不说了,有兴趣 ...
- 洛谷 1823 [COI2007] Patrik 音乐会的等待
[题解] 维护一个单调栈即可. 但是因为有相同身高的存在,所以要稍微考虑下相同身高的处理.因为这个卡了一下下QAQ... #include<cstdio> #include<algo ...
- Leetcode 51.N后问题
N后问题 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. ...
- iOS攻城狮修炼之路
自己总结的学习iOS的笔记,打造一个全面的知识体系,iOS攻城狮修炼之路[持续更新中] iOS学习笔记01-APP相关 iOS学习笔记02-UIScrollView iOS学习笔记03-UITable ...