前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift3.0 - 元类型

Swift3.0 - 元类型

作者头像
酷走天涯
发布2018-09-14 14:52:30
2970
发布2018-09-14 14:52:30
举报
文章被收录于专栏:每日一篇技术文章
  • 认识AnyClass
代码语言:javascript
复制
 typealias AnyClass = AnyObject.Type

所有类都隐士实现的协议 当你在一个或者类中使用@obj 创建类方法或者属性时,会被系统知道,认为它是AnyClass 的方法

我们看一个例子

代码语言:javascript
复制
class Student{
    @objc static let describe = "这是个学生类"
    @objc class func getDefaultValue() -> Int {
        return 0
    }
}

   // 定义两个方法
  func getDefaultValue(_ c: AnyClass) -> Int? {
         return c.getDefaultValue?()
   }
   func getDescribeValue(_ c: AnyClass) -> String? {
    return c.describe
   }

接下来我们调用一下

代码语言:javascript
复制
print(getDefaultValue(Student.self))
print(getDescribeValue(Student.self))

运行结果:

Optional(0) Optional("这是个学生类")

我们来继续

代码语言:javascript
复制
print(getDefaultValue(NSString.self))
print(getDescribeValue(NSString.self))

运行结果:

nil nil

  • 类的类型

a.获取类的类型

代码语言:javascript
复制
class Student {
    required  init(){
    }
}
// 定义类的类型变量
let  StudentType: Student.Type = Student.self
//  AnyClass 可以接受任何类的类型
let type: AnyClass =  Student.self

b.同过类的类型初始化对象

代码语言:javascript
复制
let  stu = StudentType.init()

注意:

通过这种方式初始化对象的时候,必须有required 修饰的初始化方法才行

  • 对类的类型做类型检测
代码语言:javascript
复制
protocol TeacherDelegate {
}

class Teacher:TeacherDelegate{
}

let teacherType = Teacher.self
func isStudentDelegate(_ type:AnyClass)->Bool{
    if type is TeacherDelegate.Type{
        return true
    }
    return false
}

print(isStudentDelegate(teacherType))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.10.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档