Swift中的类型相关内容

 

 Any、AnyObject

1、Swift提供了2种特殊的类型:Any、AnyObject

        Any可以代表任意类型(枚举、结构体、类,也包括函数类型)

        AnyObject可以代表任意类类型(在协议后面写上AnyObject,代表只有类能够遵守这个协

        议)

class Person {
    
}

var stu: Any = 10
stu = "Jack"
stu = Person()

 is、as?、as!、as

1、is用来判断是否为某种类型,as用来做强制类型转换

class Person {
    func study() {
        
    }
}

var stu: Any = 10
(stu as? Person)?.study()
var data = Array<Any>()
data.append(2 as Any)

X.self、X.Type、AnyClass

1、X.self是一个元类型(metadata)的指针,metadata存放着类型相关信息

class Person {
    
}

Person.self

2、X.self是属于X.Type类型

 

Person.Type是堆空间对象的前八个字节,也就是元类型地址值。

class Person {}
class Student: Person {}

var perType: Person.Type = Person.self
var stuType: Student.Type = Student.self

perType = Student.self
class Person {}
class Student: Person {}

var anyType: AnyObject.Type = Person.self
anyType = Student.self

public typealias AnyClass = AnyObject.Type
var anyType2: AnyClass = Person.self
anyType2 = Student.self
var per = Person()
var perType = type(of: per)//非函数调用,直接取出per的前八个字节
print(Person.self == perType) // true

元类型的应用

1、元类型类似于OC里面的class,可以用于动态初始化

class Animal {
    required init() {}
}

class Cat: Animal {}

class Dog: Animal {}

class Pig: Animal {}

func create(_ classes: [Animal.Type]) -> [Animal] {
    var arr = [Animal]()
    for cls in classes {
        arr.append(cls.init())
    }
    return arr
}

print(create([Cat.self, Dog.self, Pig.self]))

2、可以通过元类型调用runtime的一些API。Swift有一个隐藏的基类,swift._swiftObject

Self

1、Self一般用作返回值类型,限定返回值跟方法调用者必须是同一类型(也可以作为参数类型)

protocol Runnable {
    func test() -> Self
}

class Person: Runnable {
    required init() {}
    
    func test() -> Self {
        type(of: self).init()
    }
}

class Student: Person {}

var stu = Student()
stu.test() //Student

2、如果Self用在类中,要求返回时调用的初始化器是required的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
UICollectionView是一种用于展示多种类型的可滚动视图的类,它在Swift也可使用。它是UIKit框架的一部分,提供了一个灵活的方式来展示和管理大量的数据。 使用UICollectionView是为了展示具有多种布局和组件的数据集合。它类似于UITableView,但比UITableView更强大,可以支持多行或多列的自定义布局。 使用UICollectionView时,首先需要创建一个UICollectionViewLayout对象来定义布局。布局包含了单元格的大小、间距、滚动方向等信息。 然后,需要创建一个UICollectionView对象,并设置数据源和委托。数据源用于提供内容,委托用于处理用户交互和其他自定义操作。 接下来,实现UICollectionViewDataSource协议的方法,用于提供单元格的数量和内容。通常需要创建一个UICollectionViewCell的子类,并在数据源方法使用该单元格。 然后,可以通过UICollectionViewDelegate协议的方法来响应选单元格的操作,并执行相关的操作,如打开新的视图控制器或执行其他自定义操作。 最后,将UICollectionView添加到视图,并通过reloadData()方法加载和刷新数据。 使用UICollectionView时,还可以自定义单元格的外观、动画效果和交互行为,以满足特定的设计要求。 在Swift,可以使用UICollectionViewFlowLayout来快速创建简单的网格布局。同时,也可以使用自定义的布局来实现更复杂的布局需求,如瀑布流布局、层叠布局等。 总的来说,UICollectionView是一种强大而灵活的视图类,在Swift可以方便地使用,用于展示和管理多种类型的数据集合。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Win_77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值