.Type & .self

Posted by Genie on April 5, 2021

.Type 表示的是某个类型的元类型 (meta 元类)

AnyClass 是一个 AnyObject 的一个元类型

typealias AnyClass = AnyObject.Type

其实在 Swift 中,.self 可以用在类型后面取得类型本身,也可以用在某个实例后面取得这个实例本身。前一种方法可以用来获得一个表示该类型的值,这在某些时候会很有用;而后者因为拿到的实例本身,所以暂时似乎没有太多需要这么使用的案例。

通过meta 实现的示例

1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class MusicViewController: UIViewController {

}

class AlbumViewController: UIViewController {

}

let usingVCTypes: [AnyClass] = [MusicViewController.self,
    AlbumViewController.self]

func setupViewControllers(vcTypes: [AnyClass]) {
    for vcType in vcTypes {
        if vcType is UIViewController.Type {
            let vc = (vcType as! UIViewController.Type).init()
            print(vc)
        }

    }
}

setupViewControllers(usingVCTypes)

2.

1
2
3
self.tableView.registerClass(
    UITableViewCell.self, forCellReuseIdentifier: "myCell")