接口和扩展

前端之家收集整理的这篇文章主要介绍了接口和扩展前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

//: Playground - noun: a place where people can play@H_404_1@


@H_404_1@

import UIKit@H_404_1@


@H_404_1@

//使用 protocol 来声明一个接口。@H_404_1@

protocol ExampleProtocol {@H_404_1@

var simpleDescription: String { get }@H_404_1@

mutating func adjust()@H_404_1@

}@H_404_1@

//类、枚举和结构体都可以实现接口。@H_404_1@

class SimpleClass: ExampleProtocol {@H_404_1@

String = "A very simple class."@H_404_1@

var anotherProperty: Int = 120@H_404_1@

func adjust() {@H_404_1@

simpleDescription += " Now 100% adjust."@H_404_1@

}@H_404_1@

func add() {@H_404_1@

simpleDescription += " Now 50% add."@H_404_1@

}@H_404_1@

}@H_404_1@

var a = SimpleClass()@H_404_1@

a.adjust()@H_404_1@

let aDescription = a.simpleDescription@H_404_1@


@H_404_1@

struct SimpleStructure: ExampleProtocol {@H_404_1@

String = "A aimple structure"@H_404_1@

func adjust() {@H_404_1@

simpleDescription += " (adjusted)"@H_404_1@

}@H_404_1@

}@H_404_1@

var b = SimpleStructure()@H_404_1@

b.adjust()@H_404_1@

let bDescription = b.simpleDescription@H_404_1@


@H_404_1@

enum SimpleEnum: ExampleProtocol {@H_404_1@

case First(String),Second(String),Third(String)@H_404_1@

@H_404_1@

String {@H_404_1@

get{@H_404_1@

switch self {@H_404_1@

case let .First(text):@H_404_1@

return text@H_404_1@

let .Second(text):@H_404_1@

let .Third(text):@H_404_1@

default:@H_404_1@

return "get error"@H_404_1@

}@H_404_1@

}@H_404_1@

set {@H_404_1@

self = .First(newValue)@H_404_1@

self = .Second(newValue)@H_404_1@

self = .Third(newValue)@H_404_1@

}@H_404_1@

}@H_404_1@

}@H_404_1@

@H_404_1@

func adjust() {@H_404_1@

self {@H_404_1@

let .First(text):@H_404_1@

self = .First(text + " (first case adjust)")@H_404_1@

let .Second(text):@H_404_1@

self = .Second(text + " (Second case adjust)")@H_404_1@

let .Third(text):@H_404_1@

self = .Third(text + " (Third case adjust)")@H_404_1@

}@H_404_1@

}@H_404_1@

}@H_404_1@

var c = SimpleEnum.First("FirstVal")@H_404_1@

c.simpleDescription@H_404_1@

c.adjust()@H_404_1@

c.simpleDescription@H_404_1@

var d = SimpleEnum.Second("Hello")@H_404_1@

var text = d.simpleDescription@H_404_1@

d.simpleDescription = "Word"@H_404_1@

text = d.simpleDescription@H_404_1@

d.adjust()@H_404_1@

text = d.simpleDescription@H_404_1@

//注意声明 SimpleStructure 时候 mutating 关键字用来标记一个会修改结构体的方法SimpleClass 的声明不需要标记 任何方法因为类中的方法经常会修改类。@H_404_1@


@H_404_1@

//使用 extension 来为现有的类型添加功能,比如添加一个计算属性方法。你可以使用扩展来给任意类型添加协议,甚至是你从外部库或者框架中导入的类型。@H_404_1@

extension Int: ExampleProtocol {@H_404_1@

String {@H_404_1@

return "The number \(self)"@H_404_1@

}@H_404_1@

self += 42@H_404_1@

}@H_404_1@

}@H_404_1@

//你可以像使用其他命名类型一样使用接口名——例如,创建一个有不同类型但是都实现一个接口的对象集合。当你处理 类型是接口的值时,接口外定义的方法不可用。@H_404_1@

let protocolValue: @H_502_482@ExampleProtocol = a@H_404_1@

protocolValue.simpleDescription@H_404_1@

//即使 protocolValue 变量运用时的类型是 simpleClass,编译器会把它的类型当做 ExampleProtocol。这表示你不能调用类在它实现的接口之外实现的方法或者属性。@H_404_1@

猜你在找的Swift相关文章