swift -- as / 扩展
一、使用 可选链式 调用代替强制展开
//当声明一个属性时,将属性类型设置为可选类型: 好处: 当可选类型的属性被赋予初始值时,系统调用初始值;当可选类型属性没有赋予初始值时,系统只会调用失败;如果属性强制展开,就会崩溃
// 如果属性为一般类型,则必须赋予初始值
struct Point {
var width : Int = 0
}
class Person {
var name : String = ""
var age : Int? //可选类型, 可以不赋值
var po : Point? = Point.init() //赋值
}
//调用
var person = Person.init()
person.name = "adsf"
print(person.name)
print(person.age)
//print(person.po!.width) //展开,只有赋有初始值,展开才不会报错
person.po?.width = 1000
二、类型匹配
1.检查类型 is
var array = [1,2,"10","88",90,100]
var strNum = 0
var intNum = 0
for i in array {
if i is Int{
intNum += 1
}
if i is String {
strNum += 1
}
}
print(strNum,intNum) // 2 4
2.向下转型 as? 或 as!
//NSMutableArray > NSArray > Array
//可变类型-->不可变-->swift
var arr = NSMutableArray.init(capacity: 0)
arr.addObject(1)
arr.addObject(2)
let arr2 = arr as NSArray
let arr3 = arr2 as Array //最终arr3 变成swift中的数组类型
print(arr3)
3.Any 和 AnyObject :
//a.AnyObject 可以表示任何类类型的 实例。
//b.Any 可以表示任何类型,包括函数类型。
var array6 : [AnyObject] = [1,2,3,4,"io"]
print(array6)
三、扩展
//1.扩展语法
extension Int {
//2.属性扩展 (一定有返回值的)
var a : Int {
return self * 10
}
//3.方法扩展
func age() -> Void{
print("age")
}
}
//使用拓展
var ss : Int = 5
print(ss)
print(ss.a)
ss.age()
4.如果给父类扩展,则子类同样可以获取到
例:
class Student{
var name = ""
}
class Xiao: Student {
var age = 2
}
//扩展父类
extension Student {
func eat() -> Void{
print("eat")
}
}
//调用
var stu = Student.init()
stu.eat()
var xiao = Xiao.init()
xiao.eat() //子类可以调用父类的 拓展的方法
swift -- as / 扩展的更多相关文章
- 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器
1. 协议(Protocol):与OC之间唯一不同的是Swift中的协议不管是属性还时方法全部是必须实现的 /** protocol*/ protocol FullNamed { /** 计算属性申明 ...
- Swift - 类扩展(extension)
Swift语言的类扩展是一个强大的工具,我们可以通过类扩展完成如下事情: 1,给已有的类添加计算属性和计算静态属性 2,定义新的实例方法和类方法 3,提供新的构造器 4,定义下标脚本 5,是一个已有的 ...
- Swift中扩展的使用
import Foundation /* 扩展 1.使用扩展添加属性, 方法, 可变方法, 构造器, 下标, 嵌套类型 2.可以使一个已有类型符合一个或者多个协议 3.扩展与OC的Category类似 ...
- swift学习笔记4——扩展、协议
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Swift基础--Swift中的分类以及在分类中扩展init方法的注意事项
Swift中的分类 1.创建一个空的swift文件 2.关键字extension,格式: extension 要扩展的类名 {} extension UIButton { } Swift中扩展init ...
- swift 学习- 23 -- 扩展
// 扩展 就是为一个已有的 类, 结构体, 枚举, 或者 协议类型添加新功能, 这包括在没有权限获取 原始代码的情况下 扩展类型的能力 (即 逆向建模), 扩展和 OC 中的分类类似, (与 OC ...
- Swift 学习笔记十五:扩展
扩展就是向一个已有的类.结构体或枚举类型加入新功能(functionality).扩展和 Objective-C 中的分类(categories)相似.(只是与Objective-C不同的是,Swif ...
- Swift-----类型转换 、 嵌套类型 、 扩展 、 协议 、 访问控制
使用is和as操作符判断和转换数组中的对象类型 1.1 问题 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例.在Swift中使用is和as操作符实现类型转换. 本案例定义一个媒体类 ...
- swift开源项目精选
Swift 开源项目精选-v1.0 2016-03-07 22:11 542人阅读 评论(0) 收藏 举报 分类: iOS(55) Swift(4) 目录(?)[+] 转自 http: ...
随机推荐
- javascript获取整数随机数
javascript获取整数随机数 // 从4到10的随机数,|0是生成正整数 var numBars = Math.random()*6+4|0; 也可以通过右移0位(或者左移0位)进行取整 var ...
- 如何改变xls中的单元格左上角的图标
点绿色小三角的是文本型数字,是不能参与加减运算的.首先选中含有绿色小三角的单元格,右击鼠标选择,设置单元格格式, 数字选项卡,选择常规
- spring mvc 资源包的映射
在springmvc.xml中进行设置: <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- VoiceEngine获取硬件信息
#include "webrtc\voice_engine\include\voe_base.h" #include "webrtc\voice_engine\inclu ...
- 如何在项目中引入MetaQ消息收发机制
当需要异步发送和接收大量消息时,需要在Crystal项目中引入MetaQ消息收发机制. 关于MetaQ使用的官方例子可参考:https://github.com/killme2008/Metamorp ...
- Oracle BEQ方式连接配置
Oracle BEQ方式连接配置 服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接可以理解为进程间直接通信,不需要走网络监听,性能更高. 可以参考MOS:How To Connect Us ...
- Neutron Router 工作原理 - 每天5分钟玩转 OpenStack(142)
上一节我们创建了 router 连通了 vlan100 和 vlan101, 今天分析router是如何工作的.首先查看控制节点的网络结构发生了什么变化: br-int 上多了两个 port: 1. ...
- 用php进行md5解密的源码,亲测可用
<?php $md5 = "c1c95b382230eb9e27a60c4baceb5f2e"; $uid = "hhp-ImZRY"; $token = ...
- cookie,sessionstorage,localstorage区别
都是保存在浏览器端,且同源的,区别如下: 1.携带 cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递. 而sessionStorage和local ...
- 由merge into引起的序列跳号
最近生产库反应出一个问题,某张表的主键ID并没有按照原计划的期望增加,而是间歇性跳号,每次跳2万多,经过研究发现是某个同步过程的merge into引起的,具体语句如下 merge into t_if ...