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

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

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

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. Flex timer使用 keydown事件注册到stage

    Flex timer使用 keydown事件注册到stage: <?xml version="1.0" encoding="utf-8"?> < ...

  2. 超棒的30款JS类库和工具

    http://www.csdn.net/article/2013-07-01/2816068-best-javascript-libraries-and-tools

  3. iOS 插件化开发汇总 Small框架

    应用插件化背景 目前很多应用功能越来越多,软件显得越来越臃肿.因此插件化就成了很多软件发展的必经之路,比如支付宝这种平台级别的软件: 页上密密麻麻的功能,而且还在增多,照这个趋势发展下去,软件包的大小 ...

  4. Redis key 相关命令

    其实本质上,Redis 就是一个Key---Value 数据库.这里我先介绍下Redis中关于的key的相关命令, 注意:key是字符串存储,但是不能使用 空格 或者 “\n”,value 则可以使用 ...

  5. C语言函数名与函数指针详解

    一.通常的函数调用 一个通常的函数调用的例子: /* 自行包含头文件 */ void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */ int main(in ...

  6. ArcGIS制图表达Representation-符号制作

    ArcGIS制图表达Representation-符号制作 by 李远祥 在ArcGIS的符号里面,存在着两种符号体系,一种是传统的标准符号体系,一种是制图表达符号体系.标准符号几乎被绝大部分ArcG ...

  7. android之intent显式,显式学习

    intent,意图 当从一个Activity到另一个Activity时调用,这里重点学习显式,隐式的使用 使用语句上的区别: 隐式意图:                 显式意图: setAction ...

  8. matlab 全局变量的使用举例

    昨天在写项目时,想要把获取到的临时变量放入一个全局变量,为以后的使用做准备,结果总是出错,今天做了一个小程序,放在这里备用. 自定义函数: global_p.m function y=global_p ...

  9. [Hadoop] - Hadoop Mapreduce Error: GC overhead limit exceeded

    在运行mapreduce的时候,出现Error: GC overhead limit exceeded,查看log日志,发现异常信息为 2015-12-11 11:48:44,716 FATAL [m ...

  10. JS中都有哪些数据类型呢?

    js中有5种数据类型:Undefined.Null.Boolean.Number和String.还有一种复杂的数据类型Object,Object本质是一组无序的名值对组成的.