Swift4.0复习类型定义、类型投射等操作
1.类型定义:
/// 这里将MyInt定义为Int32类型
typealias MyInt = Int32
/// 这里将MyArrayInt定义为[MyInt]数组类型
typealias MyArrayInt = [MyInt]
2.元类型:
“元类型(metatype)是指可引用某个类型的类型对象的类型。” 摘录来自: “大话Swift 4.0”。 iBooks.
let a = .self
// 输出:a = 10
print("a = \(a)")
let tuple = (, 0.5, "abc").self
// 输出:tupe = (10, 0.5, "abc")
print("tupe = \(tuple)")
func foo() {
print("Foo...")
}
// 这里直接输出:Foo...
foo.self()
3.类型获取:
let mc: Prot = MyClass()
// 这里通过type(of:)函数来获取mc对象的元类型实体,
// type(of: mc)所返回的类型就是MyClass.Type
typeFetch(t: type(of: mc))
4.Any和AnyObject:
“Swift编程语言中提供了两个根类型,
一个是 Any,它可用于指向Swift中的任一类型,
包括函数类型与元组类型;
还有一个是 AnyObject,它其实是一个协议类型,用于指向Swift中的任一类类型的对象引用。
引入 AnyObject 的主要目的还是为了能与Objective-C进行方便对接。” 摘录来自: “大话Swift 4.0”。 iBooks.
struct MyStruct { }
class MyClass { }
func foo() { }
// 声明Any类型的对象obj
var obj: Any
// obj指向MyStruct结构体的对象实例
obj = MyStruct()
// obj指向MyClass类的对象实例
obj = MyClass()
// obj指向一个(Int, Double, String)元组对象
obj = (, 2.0, "abc")
print("obj = \(obj)")
// obj指向函数foo的引用
obj = foo
// 这里定义了AnyObject类型的对象引用cls
// 并将它指向MyClass对象实例
let cls: AnyObject = MyClass()
5.类型投射:
“在Swift编程语言中提供了两种类型投射操作符,分别为 as! 与 as?。
由于向下投影操作可能会失败,所以一般情况下我们可以使用 as? 进行操作,它返回一个Optional对象,
如果投射失败,则会返回空值 nil。
如果我们能确保当前对象能被安全投射到我们所指定的类型,那么可以使用 as!。
该操作符直接返回类型投射之后的对象,不过如果万一投射失败,则运行时就会发生异常崩溃。” 摘录来自: “大话Swift 4.0”。 iBooks.
6.类型检查:
if obj is Child {
print("This is Child")
}
7.嵌套类型:
“嵌套类型中可访问外部类型中的私有成员,但外部类型则不可访问其嵌套类型的私有成员。” 摘录来自: “大话Swift 4.0”。 iBooks.
Swift4.0复习类型定义、类型投射等操作的更多相关文章
- Swift4.0复习特性、编译标志和检查API的可用性
1.Swift中的特性: @引出,后面紧跟特性名,圆括号带参数即可. @attribute(args) avaiable: 指明对象,函数,类型的可用性. @available(iOS 10.0, m ...
- Swift4.0复习访问控制与作用域
1.访问等级: open: 可以继承,可以重写. public: “public 访问等级能用于修饰所有文件作用域的函数.对象.协议.枚举.结构体.类以及各种类型中的属性与方法.用 public 所修 ...
- Swift4.0复习错误处理
1.Swift中错误的表示: “在Swift中如果我们要定义一个表示错误的类型非常简单,只需遵循 Error 协议即可.我们通常用枚举或结构体类型来表示错误类型,当然枚举可能用得更多些,因为它能更直观 ...
- Swift4.0复习协议
1.协议的定义: /// 定义一个协议MyProt protocol MyProt { /// 声明了一个实例方法foo, /// 其类型为:() -> Void func foo() ...
- Swift4.0复习泛型
1.泛型的基本使用: /// 定义了一个泛型结构体MyStruct, /// 其泛型形参为T struct MyStruct<T> { /// 用泛型T定义存储式成员属性t var t ...
- Swift4.0复习扩展
1.扩展计算式属性: 2.对方法进行扩展: /// 定义枚举类型Light, /// 它指定了基本类型String enum Light: String { case red = "red& ...
- Swift4.0复习类
1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...
- Swift4.0复习结构体
1.基本语法: /** 定义了一个结构体 */ struct Structure { /// 一个常量存储式实例属性, /// 并直接为它初始化 let constProperty = /// ...
- Swift4.0复习枚举
1.枚举类型: “Swift编程语言中,枚举类型属于值类型,而不是引用类型.” 摘录来自: “大话Swift 4.0”. iBooks. 2.枚举类型和枚举对象的定义: enum Enumeratio ...
随机推荐
- Vue基础入门笔记
不是面向DOM进行编程,而是面向数据去编程.当数据发生改变,页面就会随着改变. 属性绑定(v-bind)和双向数据绑定(v-model) 模板指令(v-bind:)后面跟的内容不再是字符串而是: js ...
- springcloud实践(二)之api网关:zuul
zuul是什么? front door. API Gateway.Zuul is a JVM based router and server side load balancer by Netflix ...
- LeetCode 364. Nested List Weight Sum II
原题链接在这里:https://leetcode.com/problems/nested-list-weight-sum-ii/description/ 题目: Given a nested list ...
- qt截图grapWindow,操作系统剪切版QClipBoard实现进程间通信
QPixmap::grapWindow(winID) 存放一个图片QDesktopWidget 获得当前程序所在窗口id pid每个窗口有winID() // 3pixmap scaled 比例缩放 ...
- iframe标签在PC端的使用
随着前端框架的崛起 各种组件化 模块化开发 然而我发现在PC端要考虑兼容 ~~~~ 自己琢磨着 在PC端怎么吧一个页面做成一个公共的部分 发现有个iframe标签可以在页面中嵌套 虽然iframe可 ...
- Java为什么会流行
为什么Java语言能长期占据编程语言排行榜首位? 面向对象设计,使用简单,可以很快速的入门: 开源生态做得好,很多可重用的组件,拿来即用: 跨平台,高性能,是做后台开发的首选 另一方面,Java命好, ...
- 正则及re模块-基础(一)
正则表达式 一说规则我已经知道你很晕了,现在就让我们先来看一些实际的应用.在线测试工具 http://tool.chinaz.com/regex/ http://tool.oschina.net/ ...
- cometoj---contest#3 棋盘
棋盘:(状压dp) 传送门:https://www.cometoj.com/contest/38/problem/B?problem_id=1535 题目描述 小猫有一个 2×N 的棋盘,每一个格子放 ...
- Vue中的$emit组件事件运用
话不多说上代码 vue>src>App.vue <template> <div id="app"> <!-- header --> ...
- JSP迭代标签
1. 新建LoopTag类,代码如下: package bid.zhazhapan.fims.tag; import java.io.IOException; import java.util.Col ...