美文网首页
Swift-Optional&Equatable&访问控制权限

Swift-Optional&Equatable&访问控制权限

作者: 浪的出名 | 来源:发表于2020-12-31 14:46 被阅读0次

Optional

  • Optional是通过enum实现的一个非常好的代表,这里我们可以通过阅读Optional的源码来看一下:
    image
  • 可以看到Optional本质上是一个枚举,当前枚举接受一个泛型参数,而当前some关联的值是Wrapped,也就是说下面两种写法是一样的
var age : Int?
var age : Optional<Int>
  • 枚举我们可以通过模式匹配来匹配对应的值
var age : Int? = 10

switch age {
    case .none :
        print("nil")
    case .some(10) :
        print(10)
    default :
        print("default")
}

Optional解包

  • 涉及到Optional我们就不得不面对一个问题:解包。因为当前的可选项其实是对我们的值做了包装, 当前不为nil的时候我们就需要从其中拿到我们要的值。

强制解包

  • 简单粗暴,但是如果值为nil就会崩溃


    image

if let&guard let

  • 实际开发中解包通常是使用if letguard let,这里我们是通过可选项绑定的方式来判断当前的可选项是否有值,我们看一下写法:
if let tmp = age {
    print(tmp)
}else{
    print("nil")
}

func test() {
    
    guard let guardTmp = age else {return}
    
    print(guardTmp)
}

test()
  • 可以看到guard后面的判断条件为else的时候会执行当前大括号里面的内容,反之执行后面的代码。guard在我们当前这句代码里面作用就是如果当前age为空,我们就退出我们当前函数。
  • 其次,大家来看一个点:我们在使用if let创建的内容当中tmp仅仅只能在当前if分支的大括号内访问到,而我们当前的guard定义的guardTmp在当前大括号外部也是能访问到的。

Equatable

  • Swift中的类型,可以通过遵循Equatable协议来使用相等运算符==和不等运算符¡=来比较两个值相等还是不相等。Swift标准库中绝大多数的类型都默认实现了Equatable协议。
var age = 10
var age1 : Int = 10

var isEqual = age == age1
print(isEqual)
// 返回结果为true
  • 对于Int来说,系统默认实现了==,对于我们自定义的的类型,我们需要遵循Equatable协议
  • 如果是值类型
struct XQTeacher : Equatable{
    var age : Int
    var name : String
}

var t = XQTeacher(age: 18, name: "xq")

var t1 = XQTeacher(age: 19, name: "xq")

var t2 = XQTeacher(age: 18, name: "xq")

print(t == t1)
print(t == t2)
// 返回结果为false true 
  • 观察下sil代码,看看它是怎么实现的,系统帮我们实现了一个函数


    image
  • 函数的实现,通过取出两个结构体,取出结构体的属性依次比较


    image
  • 如果是引用类型,编译器就会报错,需要我们实现对应的函数==

    image
  • 根据提示完善代码

class XQTeacher : Equatable{
    static func == (lhs: XQTeacher, rhs: XQTeacher) -> Bool {
        return lhs.age == rhs.age && lhs.name == rhs.name
    }
    
    
    var age : Int
    var name : String
    
    init(age : Int , name :String) {
        self.age = age
        self.name = name
    }
}

var t = XQTeacher.init(age: 18, name: "xq")

var t1 = XQTeacher.init(age: 19, name: "xq")

print(t == t1)
  • 经过上面的学习,可以看到==用来检验值是否相等,也就是equal to;
  • ===是用来检验两个对象是否是同一个实例对象是否是同一个

访问控制权限

  • Swift当中主要是针对其他源文件和模块对你代码的访问控制,这里我们先来总结一下Swift中的有关访问控制权限的关键字
    • private:访问级别仅在当前定义的作用域内有效
    • filePrivate:此访问限制仅限制在当前定义的源文件中
    • Internal:默认访问级别 允许定义模块中的任意源文件访问,但不能被该模块之外的任意源文件访问
    • public: 开放式访问,使我们能够在其定义模块的任何源文件中使用代码,并且可以从另一个源文件访问源文件。只能在定义的模块中继承和子类的重写
    • Open:最不受限制的访问级别

相关文章

  • Swift-Optional&Equatable&访问控制权限

    Optional Optional是通过enum实现的一个非常好的代表,这里我们可以通过阅读Optional的源码...

  • Java基础学习六 关键字

    java语言中的访问控制权限修饰符 访问控制权限修饰来控制元素的访问范围。 访问控制权限修饰符包括:public ...

  • 进阶:访问控制权限

    访问控制权限 访问控制权限:private、protected、public、 默认。 private:私有的只...

  • Java编程思想(第四版)学习笔记(7)

    第六章 访问权限控制 1.访问权限控制的等级 从最大权限到最小权限依次为:public、protected、包访问...

  • java权限控制

    浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制。在讨论访问权限控制之前,先来讨论...

  • 权限控制

    RBAC模式进行权限控制,即(Role-Based Access Control)基于角色的访问控制。实现权限访问...

  • 6、访问权限控制(封装)

    访问权限限制等级,从大到小依次为:public, protected, 包访问权限, private访问权限的控制...

  • Swift 访问控制 ⑭

    1. 访问控制权限 在访问权限控制这块,Swift提供了5个不同的访问控制级别(以下是从高到低排列,实体指被访问级...

  • Java访问控制符

    Java访问控制符的访问权限

  • laravel 之用户授权使用讲解

    版本 laravel5.2 应用场景 控制对资源的访问权限,这个权限不同于RBAC(角色的权限访问控制),比如,只...

网友评论

      本文标题:Swift-Optional&Equatable&访问控制权限

      本文链接:https://www.haomeiwen.com/subject/ovaloktx.html