封装权限(访问控制) - 补充

setter和getter的权限问题

getter本身权限是不能比setter低的

class Person
{
    private(set) var val = "123"
    private(set) var str:String
    {
        set { print(newValue) }
        get { return "get" }
    }
}
var p = Person()
p.val = "456"
print(p.val)
p.str = "123"
print(p.str)

拿这段代码来说,p.val和p.str的set方法调用是会出错的,因为权限只能在person内部访问

比如反过来把set设置为private那样权限就比get低了,所以会报错

初始化器

1.创建一个framework工程,然后创建一个swift类,代码写成如下内容,然后运行得到一个NewFW.framework

 

2.把这个framework拖到要运行的项目

然后会发现会报错,因为外面是Public或者internal镶嵌里面的类型是internal权限的,其它模块无法访问该模块的internal修饰的属性或者类等

解决办法也简单,就是手动写init并加上Public的权限

import Foundation

public class Person
{
    var str:String = ""
    public init(str:String)
    {
        self.str = str
    }
}

枚举

枚举在嵌套类型里面比较特殊 ,枚举无法单独给某个case设置权限,单独的case也默认和用enum关键定义的枚举同一权限

协议

协议也无法单独给每个函数或者变量或者说关联属性来设置权限,和枚举一样,协议的内部嵌套属性自动遵守协议的权限

比如这段代码,只可以在外部定义权限,内部是无法单独定义权限

internal protocol Runable {
    func go()
}

public class Animal : Runable
{
    private func go()
    {
    }
}

这么写是会报错的,协议的权限就是实现这个协议内容的最小权限必须大于这个嵌套或者这个协议,也就是说这个go函数的访问权限必须大于Animal和Runable,也就是说,最少也得是internal权限

拓展

拓展和上面一样,默认接受拓展最外层的访问级别,也就是定义拓展时候的访问级别,没写权限则参考class的嵌套权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-date-picker是Element UI库中的一个日期选择器组件,用于在网页中选择日期。它提供了丰富的配置选项和交互功能,可以满足不同场景下的日期选择需求。 封装el-date-picker的步骤如下: 1. 引入Element UI库:在项目中引入Element UI库,可以通过CDN引入或者使用npm安装。 2. 创建封装组件:在Vue组件中创建一个新的组件,可以命名为DatePicker或其他合适的名称。 3. 在组件中使用el-date-picker:在新创建的组件中使用el-date-picker组件,并根据需要配置相关属性和事件。 4. 封装组件的props:根据需要,可以在封装组件中定义props来接收父组件传递的属性值,例如设置默认日期、禁用日期等。 5. 封装组件的事件:根据需要,可以在封装组件中定义事件来向父组件传递选择的日期值或其他相关信息。 6. 样式和布局:根据项目需求,可以对封装组件进行样式和布局的调整。 以下是一个简单的封装el-date-picker的示例代码: ```vue <template> <div> <el-date-picker v-model="selectedDate" :default-value="defaultDate" :disabled-date="disabledDate" @change="handleChange" ></el-date-picker> </div> </template> <script> export default { name: 'DatePicker', props: { defaultDate: { type: Date, default: null } }, data() { return { selectedDate: null } }, methods: { handleChange(date) { this.$emit('select', date); }, disabledDate(time) { // 自定义禁用日期的逻辑 // 返回true表示禁用该日期,返回false表示可选 return time.getTime() < Date.now(); } } } </script> <style scoped> /* 样式调整 */ </style> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值