博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift基础-部分关键字说明与示例
阅读量:6266 次
发布时间:2019-06-22

本文共 3234 字,大约阅读时间需要 10 分钟。

权限修饰符

权限修饰符可以用来修饰类、结构体、枚举、变量、常量、函数等

五种权限修饰符的区别

  • private 修饰的属性或者方法只能在当前类里面访问。
  • fileprivate 访问级别所修饰的属性或者方法在当前的Swift源文件里可以访问
  • internal (默认访问级别,internal修饰符可写可不写) internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。 如果是框架或者库代码,则在整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。 如果是App代码,也是整个App代码,也是在整个App内部都可以访问。
  • public 可以被任何人访问,但是在其他module中不可以被重写和继承,而在本module中可以重写和继承
  • open 可以任何人使用,包括重写和继承

权限大小顺序是

private < fileprivate < internal < public < open

子类的访问权限不会高于父类

static、class

  • Swift 中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是 static 和 class。
  • 被static修饰的属性和方法称为类型属性和方法,反之则为实例属性和方法。
  • 它们最大的区别在于class一般是用在class类型的上下文中,而static可以用在enum、struct、protocol和class中。
  • 在两者都使用在class中时,static修饰的不能在其子类中重写而class可以。

available()

// 判断当前版本是否 iOS8.0+,OSX10.10+以及以其他平台if #available(iOS 8.0, OSX 10.10, *) {
} // 也可以放在方法前面, 使其方法在某个版本可用// iOS8.0+,OSX10.10+以及以其他平台可用@available(iOS 8.0, OSX 10.10, *) func startUserActivity() -> NSUserActivity { }复制代码

optional (可选类型)

Objective-C中的nil:表示缺少一个合法的对象,是指向不存在对象的指针,对结构体、枚举等类型不起作用(会返回NSNotFound)

Swift中的nil:表示任意类型的值缺失,是一个确定的值,要么是该类型的一个值要么什么都没有(即为nil)

let name?: String复制代码

声明了一个可选类型的name常量(表示name可能为nil)

  1. 使用"!"强制解析获取可选类型的值(不建议直接使用)
var str: String? = "Hello world"if str != nil { // !=或==可以用来判断是否为nil    print(str!) // 使用!强制解析} else {    print("值为nil")}//如果强制解析的常量或变量为nil,则运行崩溃。避免这种情况我们采用2中的可选绑定方案let name?: Stringprint(name!)//运行崩溃复制代码
  1. 使用可选绑定获取可选类型的值(建议的用法)
var str: String? = "Hello world"if let newStr = str { // 如果str有值或类型转换成功,则将值赋值给newStr直接使用    print(newStr)  // 使用newStr代替str,且不需要加!强制解析} else {    print("值为nil")}复制代码
  1. 隐式解析可选类型
var str: String!str = "Hello world"print(str) // 不需要使用!强制解析// 还是不建议直接强制解析,因为实际项目中可能中间已经对该值做了改变,若为nil则会运行错误导致APP崩溃(在不确定值百分百存在的情况下我们全部采用可选绑定来取值操作)str = nilprint(str)//编译通过,程序运行崩溃复制代码
  1. 空合运算符(用于判断变量或常量是否为nil)
// 空合运算符:a ?? b 判断a是否为nil,若a不为nil对a解封,否则返回b的值var status: Int? // 申明可选Int类型的变量status,初始值为nilstatus ?? 0 // 因为status为nil,则返回0// ?? 即为以下if else的缩写func testOption() -> Int {    let status: Int? = 1    if status == nil {        return 0    } else {        return status!    }}复制代码
  1. 可选类型在错误处理中的运用
//  方式一:try方式 程序员手动捕捉异常 do {     try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)    } catch {    // error异常的对象     print(error)              } //  方式二:try?方式(常用方式) 系统帮助我们处理异常,如果该方法出现了异常,则该方法返回nil.如果没有异常,则返回对应的对象    guard let anyObject = try? NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) else {        return    } //  方式三:try!方法(不建议,非常危险) 直接告诉系统,该方法没有异常.注意:如果该方法出现了异常,那么程序会报错(崩溃)     let anyObject = try!NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)复制代码
  1. 可选类型在类型转换中的运用
class SuperClass {    // 这是一个父类}class SubClass: SuperClass {    // 这是一个子类}let superClass = SuperClass()if let someClass = superClass as? SubClass {    // 如果转换成功,则用someClass使用即可} else {    // 转换失败}复制代码

if let (可选绑定)

let name: String? = "Hello world"// if let 连用,判断对象的值是否为'nil'if let nameNew = name {    // 进入分支后,nameNew 一定有值不需要解包    print(nameNew)}复制代码

gurd (let)

guard let和if let刚好相反,guard let守护一定有值。如果没有,直接返回。 这个新的语法允许你在一个代码周期中构建一个提前的退出点, 避免了大量的if 判断 如果 a >= b 就会进入else直接退出

guard a < b else { return }

let name: String? = "Hello world"guard let nameNew = name else {        print("name 为nil")        return}// 代码执行至此, nameNew 一定有值print(nameNew)     // 输出:Hello world复制代码

转载地址:http://szjpa.baihongyu.com/

你可能感兴趣的文章
【Java】从域名得到ip
查看>>
Mysql索引会失效的几种情况分析
查看>>
LVM逻辑卷
查看>>
zoj3591 Nim(Nim博弈)
查看>>
canvas绘图
查看>>
poj - 3039 Margaritas on the River Walk
查看>>
bootstrap(5)关于导航
查看>>
Aptana插件在eclipse中安装
查看>>
jQuery-数据管理-删除事件
查看>>
下载器简单实例
查看>>
java实现分页工具类(JDBC)
查看>>
欧几里德算法与扩展欧几里德算法
查看>>
Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 2)
查看>>
通过kafka提供的命令来查看offset消费情况
查看>>
oracle数据库从入门到精通之四
查看>>
自定义圆形图片控件
查看>>
sharepoint 2013 补丁升级步骤
查看>>
asp.net core 2.0 web api基于JWT自定义策略授权
查看>>
Skype for Business Server 2015-04-前端服务器-3-安装-管理工具
查看>>
第12章代码《跟老男孩学习Linux运维:Shell编程实战》
查看>>