美文网首页Swift的成长之路
对swift中struct,class,protocol以及他们

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

作者: 简书admin | 来源:发表于2017-02-24 15:55 被阅读49次

     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"]

    测试结构体实现扩展

    测试结构体实现扩展

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

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

    相关文章

      网友评论

        本文标题:对swift中struct,class,protocol以及他们

        本文链接:https://www.haomeiwen.com/subject/voclkttx.html