一、使用 可选链式 调用代替强制展开

//当声明一个属性时,将属性类型设置为可选类型: 好处: 当可选类型的属性被赋予初始值时,系统调用初始值;当可选类型属性没有赋予初始值时,系统只会调用失败;如果属性强制展开,就会崩溃

// 如果属性为一般类型,则必须赋予初始值

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 / 扩展的更多相关文章

  1. 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器

    1. 协议(Protocol):与OC之间唯一不同的是Swift中的协议不管是属性还时方法全部是必须实现的 /** protocol*/ protocol FullNamed { /** 计算属性申明 ...

  2. Swift - 类扩展(extension)

    Swift语言的类扩展是一个强大的工具,我们可以通过类扩展完成如下事情: 1,给已有的类添加计算属性和计算静态属性 2,定义新的实例方法和类方法 3,提供新的构造器 4,定义下标脚本 5,是一个已有的 ...

  3. Swift中扩展的使用

    import Foundation /* 扩展 1.使用扩展添加属性, 方法, 可变方法, 构造器, 下标, 嵌套类型 2.可以使一个已有类型符合一个或者多个协议 3.扩展与OC的Category类似 ...

  4. swift学习笔记4——扩展、协议

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  5. Swift基础--Swift中的分类以及在分类中扩展init方法的注意事项

    Swift中的分类 1.创建一个空的swift文件 2.关键字extension,格式: extension 要扩展的类名 {} extension UIButton { } Swift中扩展init ...

  6. swift 学习- 23 -- 扩展

    // 扩展 就是为一个已有的 类, 结构体, 枚举, 或者 协议类型添加新功能, 这包括在没有权限获取 原始代码的情况下 扩展类型的能力 (即 逆向建模), 扩展和 OC 中的分类类似, (与 OC ...

  7. Swift 学习笔记十五:扩展

    扩展就是向一个已有的类.结构体或枚举类型加入新功能(functionality).扩展和 Objective-C 中的分类(categories)相似.(只是与Objective-C不同的是,Swif ...

  8. Swift-----类型转换 、 嵌套类型 、 扩展 、 协议 、 访问控制

    使用is和as操作符判断和转换数组中的对象类型 1.1 问题 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例.在Swift中使用is和as操作符实现类型转换. 本案例定义一个媒体类 ...

  9. swift开源项目精选

    Swift 开源项目精选-v1.0 2016-03-07 22:11 542人阅读 评论(0) 收藏 举报  分类: iOS(55)   Swift(4)    目录(?)[+]   转自 http: ...

随机推荐

  1. javascript获取整数随机数

    javascript获取整数随机数 // 从4到10的随机数,|0是生成正整数 var numBars = Math.random()*6+4|0; 也可以通过右移0位(或者左移0位)进行取整 var ...

  2. 如何改变xls中的单元格左上角的图标

    点绿色小三角的是文本型数字,是不能参与加减运算的.首先选中含有绿色小三角的单元格,右击鼠标选择,设置单元格格式, 数字选项卡,选择常规

  3. spring mvc 资源包的映射

    在springmvc.xml中进行设置: <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...

  4. VoiceEngine获取硬件信息

    #include "webrtc\voice_engine\include\voe_base.h" #include "webrtc\voice_engine\inclu ...

  5. 如何在项目中引入MetaQ消息收发机制

    当需要异步发送和接收大量消息时,需要在Crystal项目中引入MetaQ消息收发机制. 关于MetaQ使用的官方例子可参考:https://github.com/killme2008/Metamorp ...

  6. Oracle BEQ方式连接配置

    Oracle BEQ方式连接配置 服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接可以理解为进程间直接通信,不需要走网络监听,性能更高. 可以参考MOS:How To Connect Us ...

  7. Neutron Router 工作原理 - 每天5分钟玩转 OpenStack(142)

    上一节我们创建了 router 连通了 vlan100 和 vlan101, 今天分析router是如何工作的.首先查看控制节点的网络结构发生了什么变化: br-int 上多了两个 port: 1. ...

  8. 用php进行md5解密的源码,亲测可用

    <?php $md5 = "c1c95b382230eb9e27a60c4baceb5f2e"; $uid = "hhp-ImZRY"; $token = ...

  9. cookie,sessionstorage,localstorage区别

    都是保存在浏览器端,且同源的,区别如下: 1.携带 cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递. 而sessionStorage和local ...

  10. 由merge into引起的序列跳号

    最近生产库反应出一个问题,某张表的主键ID并没有按照原计划的期望增加,而是间歇性跳号,每次跳2万多,经过研究发现是某个同步过程的merge into引起的,具体语句如下 merge into t_if ...