1. 基本语法
protocol SomeProtocol {
// 协议定义
}
2. 属性要求
protocol PropertyProtocol {
var name: String { get set }
var age: Int { get }
}
struct Person: PropertyProtocol {
var name: String
var age: Int
}
var person = Person(name: "John", age: 30)
person.name = "Jane" // 合法,因为 name 是可读写的
// person.age = 31 // 非法,因为 age 是只读的
3. 方法要求
protocol MethodProtocol {
func doSomething()
func calculateSum(a: Int, b: Int) -> Int
}
struct MyStruct: MethodProtocol {
func doSomething() {
print("Struct is doing something.")
}
func calculateSum(a: Int, b: Int) -> Int {
return a + b
}
}
let myInstance = MyStruct()
myInstance.doSomething() // 输出: Struct is doing something.
let sum = myInstance.calculateSum(a: 5, b: 7) // sum 等于 12
4. 可变方法要求
protocol MutatingMethodProtocol {
mutating func increment()
}
struct Counter: MutatingMethodProtocol {
var value = 0
mutating func increment() {
value += 1
}
}
var counter = Counter()
counter.increment() // counter 的值现在是 1
5. 初始化器要求
protocol InitializerProtocol {
init(name: String)
}
class MyClass: InitializerProtocol {
var name: String
required init(name: String) {
self.name = name
}
}
let instance = MyClass(name: "Example")
6. 协议继承
协议可以继承一个或多个其他协议,以形成更复杂的协议。
protocol A {
func methodA()
}
protocol B {
func methodB()
}
protocol C: A, B {
func methodC()
}
7. 类型检查与转换
使用 is 和 as 运算符可以检查协议的遵循关系,并进行协议类型的转换。
protocol SomeProtocol {
// 协议定义
}
class SomeClass: SomeProtocol {
// 类的实现
}
let someInstance: SomeProtocol = SomeClass()
if someInstance is SomeClass {
print("someInstance 是 SomeClass 的实例")
}
if let someObject = someInstance as? SomeClass {
print("成功转换为 SomeClass 类型")
}
这些是 Swift 中协议的基本用法。协议是 Swift 中实现代码复用和组件化的重要手段之一,使得类型之间的关系更加灵活。
转载请注明出处:http://www.zyzy.cn/article/detail/6861/Swift