类型检查 is,类似isKindOfClass,子类对象检查是否为父类的类型可以检查通过
as? 和as! 的区别,as?返回的是可选值,转换失败为nil
Any:通用类型 AnyObject:通用的引用类型
泛型
// 泛型在函数参数中的作用,多个泛型用逗号隔开
func changeTwoValue<T,J>( parama:inout T, parama2:inout T,parama3:J,parama4:J){
let temp = parama
parama = parama2
parama2 = temp
}
// 定义一个泛型 + 栈结构体 (栈为单出口容器,先进后出)
struct ZStruct<Item>{
var item:Array<Item> = []
mutating func addItem(parama:Item){
item.append(parama)
}
mutating func popItem(){
item.removeLast()
}
}
// 扩展:为已存在的数据类型添加功能,不需要再声明泛型
extension ZStruct {
func getItem() -> [Item] {
return item
}
}
/// 泛型的限制:
// 泛型的限制:可以是协议
protocol My {
// item可以由遵守协议的类型来定义
associatedtype Item
// 在协议中定义一个泛型类型的计算属性
var type:Item{get set}
// 在实现中第一个定义的泛型将确定协议中所有泛型的类型
func changeType(parama:Item)->Void
}
// 泛型的限制:自定义引用类型
class Student:My {
var type:Int {
get{
return 5
}
set{
newValue
}
}
func changeType(parama: Int) {
print("do")
}
func doSome<T:Student>(parama:T)->Void{
}
}
/// 泛型与where可以有更严格的约束
// where与泛型结合可以增加更严格的约束
class School<T,J> where T:My,J:My {
}
class Student<Item> {
var name:Item
init(parama:Item) {
name = parama
}
func returnName()-> Item {
return self.name
}
}
var parama = "abc"
var stu = Student.init(parama: parama)
stu.returnName()
网友评论