Swift的成长之路

对swift中struct,class,protocol以及他们

2017-02-24  本文已影响49人  简书admin

 1.结构体是只能实现协议,不能继承类或者结构体,也不能被类或者结构体继承

 2.协议是可以补充的,extension中的实现方法是默认实现,其实就是相当于OC里面的可选择实现方法

  在extension中没有实现的方法只要是实现了这个协议就必须实现其方法

 3.协议里面的方法在类里面没有实现的(可选择实现的协议方法),在类的扩展里面可以实现,但是必须是类本身没有实现,但是类是必须实现必实现的方法,不能放到类扩展里面去实现

4.结构体的extension和类的extension相似

//

//  Pizzeria.swift

//  swift_MVVM

//

//  Created by QF-001 on 2017/2/24.

//  Copyright © 2017年 QF-001. All rights reserved.

//

import UIKit

protocol ProtocolTemp {

func requiredMethod(_ ingredient:[String])

func optionalMethod()

func temp()

}

extension ProtocolTemp{

func optionalMethod(){

return requiredMethod(["tomato","mozzarella"])

}

func temp(){

print("这是协议的默认实现")

}

}

struct Lombardis:ProtocolTemp{

internal func requiredMethod(_ ingredient: [String]) {

print(ingredient)

}

func makeMargherita(){

return requiredMethod(["tomato","mozzarella","basil"])

}

}

extension Lombardis{

func temp() {

print("测试结构体实现扩展")

}

}

class ProtocolTempSon: ProtocolTemp {

internal func requiredMethod(_ ingredient: [String]) {

print(ingredient)

}

func optionalMethod(){

return requiredMethod(["tomato","mozzarella","basil", "son"])

}

}

extension ProtocolTempSon{

func temp() {

print( "类里面没有实现的,在类的扩展里面可以实现" )

}

}

class ProtocolTempGrandSon: ProtocolTempSon {

override func optionalMethod() {

return requiredMethod(["tomato","mozzarella","basil", "son","grandSon"])

}

}

下面是声明实现:

let temp1:ProtocolTemp = Lombardis()

let temp2:ProtocolTemp = Lombardis()

let temp3:ProtocolTemp = ProtocolTempSon()

let temp4:ProtocolTemp = ProtocolTempGrandSon()

temp1.optionalMethod()

temp2.optionalMethod()

temp3.optionalMethod()

temp4.optionalMethod()

temp1.temp()

temp2.temp()

temp3.temp()

temp4.temp()

运行结果:

["tomato", "mozzarella"]

["tomato", "mozzarella"]

["tomato", "mozzarella", "basil", "son"]

["tomato", "mozzarella", "basil", "son", "grandSon"]

测试结构体实现扩展

测试结构体实现扩展

类里面没有实现的,在类的扩展里面可以实现

类里面没有实现的,在类的扩展里面可以实现

上一篇下一篇

猜你喜欢

热点阅读