Swift中as as! as?的区别
as :类型一致或者子类
仅当一个值的类型在运行时(runtime)和as模式右边的指定类型一致 - 或者是该类型的子类 - 的情况下,才会匹配这个值。如果匹配成功,被匹配的值的类型被转换成as模式左边指定的模式。
class Animal {}
class Dog: Animal {}
let d = Dog()
d as Animal
as! 父类强转子类
class Animal {}
class Dog: Animal {}
let a: Animal = Dog()
a as! Dog
不加!编译会报错
as? 转换失败返回nil
class Animal {}
class Dog: Animal {}
class Cat: Animal {}
let animal: Animal = Cat()
animal as! Dog
animal as? Dog
animal as! Dog 编译会报错 as?就是对的
声明时候的!跟?的区别
var amiteLbl :UILabel?
self.amiteLbl = UILabel(frame:CGRectMake(,,,))
self.amiteLbl!.text = "I love mixbox"
self.view?.addSubview(self.amiteLbl)
由于amiteLbl是可选变量,所以可能有值,也可能为nil。
使用self.amiteLbl!是明确声明此时self.amiteLbl里一定有值,无论什么情况都调用后面的.text赋值方法。
而使用self.view?是声明此时并不确定self.view里是否有值,所以只在view有值时调用后面.addSubview方法。
这样做的目的一是让代码更明确, 二是给编译器提供更多线索,在编译时发现更多潜在错误。
Swift显然是一门非常明确,需要开发者先想清楚再编程的语言,秉承了Apple一贯的作风:)
Swift中as as! as?的区别的更多相关文章
- swift中Any,AnyObject,AnyClass的区别
这几个概念让人很迷惑,看了很多帖子,终于搞明白了,简单总结: Any 和 AnyObject 是 Swift 中两个妥协的产物.什么意思呢,oc中有个id关键字,表示任何对象,oc和swift混编的时 ...
- swift中 ?和 !的区别
可选类型(?)与强制解析运算符(!) ?是一种判断后再拆包的语法糖 !是一种强制拆包的语法糖 当你不确定有值的时候就可以用 ? 当你确定有值的时候可以用 ! ?的几种使用场景:1. ...
- Swift中的Any 与 AnyObject、AnyClass的区别?
在 Swift 中能够表示 “任意” 这个概念的除了Any .AnyObject以外,还有一个AnyClass. Any.AnyObject.AnyClass有什么区别: AnyObject是一个成员 ...
- Swift内存管理、weak和unowned以及两者区别(如何使用Swift 中的weak与unowned?)
Swift 是自动管理内存的,这也就是说,我们不再需要操心内存的申请和分配. 当我们通过初始化创建一个对象时,Swift 会替我们管理和分配内存.而释放的原则遵循了自动引用计数 (ARC) 的规则:当 ...
- swift中的nil与Objective-C中的nil区别
1.OC中,只有对象才能设置为nil,而swift中除了对象,Int.struct.enum等任何可选类型都可以等于nil 2.OC中,nil是一个指向不存在对象的指针.swift中,nil不是指针, ...
- swift 中关于open ,public ,fileprivate,private ,internal,修饰的说明
关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围大到小的排序进行说明 open,p ...
- Swift关于Any,AnyObject,AnyClass的区别与联系
在Swift语言中,协议定义类或结构体应该遵守的变量和方法集合,如下所示,这个一个标准的协议的声明: protocol NSObjectProtocol { func isEqual(object: ...
- Swift基础--Swift中的分类以及在分类中扩展init方法的注意事项
Swift中的分类 1.创建一个空的swift文件 2.关键字extension,格式: extension 要扩展的类名 {} extension UIButton { } Swift中扩展init ...
- swift中的结构体和枚举
Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体 ...
随机推荐
- Node JS爬虫:爬取瀑布流网页高清图
原文链接:Node JS爬虫:爬取瀑布流网页高清图 静态为主的网页往往用get方法就能获取页面所有内容.动态网页即异步请求数据的网页则需要用浏览器加载完成后再进行抓取.本文介绍了如何连续爬取瀑布流网页 ...
- P2173 [ZJOI2012]网络
\(\color{#0066ff}{ 题目描述 }\) 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同 ...
- 5分钟构建无服务图片鉴黄web应用(基于FunctionGraph)
函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行.即使在一些复杂的web应用场景中,函数工作流也能发挥出令人 ...
- 关闭 chrome 自动填充
<input name="uname" type="text" required autocomplete="off" class=& ...
- Educational Codeforces Round 3 C
C. Load Balancing time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Quartz中Cron详解
Quartz中的cron跟Linux系统的cron定义不太一样(Linux从分开始) 特殊字符: * 用来表示包含一个范围内的任意值. 例如, 分钟位置的“*” 表示 “每分钟”. ? 当不特定指代 ...
- 关于在JS中设置标签属性
Attribute 该属性主要是用来在标签行内样式,添加.删除.获取属性.且适用于自定义属性. setAttribute("属性名",属性值“”):这个是用来设置标签属性的: re ...
- 2.1 Rust概念
标识符 The first character is a letter.The remaining characters are alphanumeric or _.或The first charac ...
- 1.1 Go安装与项目结构初始化
软件安装安装包下载地址为:https://golang.org/dl/ 如果打不开可以: https://golang.google.cn/dl/ https://dl.google.com/go/g ...
- 转 oracle cursor 游标
转自:http://blog.csdn.net/liyong199012/article/details/8948952 游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定 ...