IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Swift 协议的使用 -> 正文阅读

[游戏开发]Swift 协议的使用

//
//  Protocols.swift
//  SwiftCode
//
//  Created by Alisa on 2022/4/14.
//  Copyright ? 2022 Alisa. All rights reserved.
//

import Foundation

/*
 
    协议:在语法上,协议中可以定义一些属性和方法,这些属性和方法只是声明,协议中并不能实现这些属性和方法。协议不是一种数据类型,没有
         构造方法,也不需要实例化
 
    swift中,协议使用protocol关键字创建,其中可以声明属性与方法,其中属性在具体实现时可以是计算属性,也可以是存储属性
 
    协议与扩展的联用:
        扩展可以为数据类型添加新的功能,通过扩展也可以为协议中约定的属性方法提供默认的实现。
        开发者可以为某个协议提供一个扩展,在扩展中为其约定的属性方法提供一套默认的实现,这样所有遵守此协议的数据类型都获取到了扩展中的默认实现
*/

protocol BookMarkProtocol{
    
    /* ** 定义属性 */
    //只读
    var bookColor:String { get }
    //可读可写
    var bookPages:Int {get set}
    //静态属性
    static var bookSize:(Int, Int){get set}
    
    /* ** 定义方法 */
    //实例方法
    func markLiteraryBooks()->Void
    //静态方法
    static func cleanBookMark()->Void
}

class Bookmark{
    
    var bookName:String
    var Bentence:String
    
    var color:String
    var pages:Int
    static var size:(Int, Int) = (20, 20)
    
    
    //协议属性
    //只读
    var bookColor:String{
        get{
            return self.color
        }
    }
    //可读可写
    var bookPages:Int{
        get{
            print("协议的实例计算属性,读取book的pages:\(self.pages)")
            return self.pages
        }
        set{
            print("协议的实例计算属性,设置book的pages:\(newValue)")
            self.pages = newValue
        }
    }
    //静态属性
    static var bookSize:(Int, Int){
        get{
            print("协议的静态计算属性,读取book的size:\(self.size)")
            return self.size
        }
        set{
            print("协议的静态计算属性,设置book的size:\(newValue)")
            self.size = newValue
        }
    }
    
    
    //协议方法
    //实例方法
    func markLiteraryBooks(){
        print("放入文学类书籍中的 book mark")
    }
    //静态方法
    static func cleanBookMark(){
        print("清理一下当前的 book mark")
    }
    
    init() {
        self.bookName = ""
        self.Bentence = ""
        
        //协议添加的属性
        self.color = ""
        self.pages = 0
    }
    
    deinit{
        print("Bookmark deinit")
    }
}

//协议与扩展的结合使用
@objc protocol ClassProcotol:AnyObject{
    //此协议方法可选择是否实现,即遵守协议的类可以实现,也可以不实现
    @objc optional func log()
}
//为ClassProtocol中的方法提供默认实现
extension ClassProcotol{
    func log(){
        print("show this log")
    }
}
class AirConditioner:ClassProcotol{
    
    //接受这个协议时,报了一个警告:Non-'@objc' method 'log()' does not satisfy optional requirement of '@objc' protocol 'ClassProcotol'
}

class Protocols{
    
    //使用协议中的实例属性与实例方法
    func useInstanceProtocols(){
        
        let mark = Bookmark()
        //设置协议中计算属性
        mark.bookPages = 22
        //设置属性
        mark.color = "blue"
        
        //读取协议中的计算属性
        let color = mark.bookColor
        let pages = mark.bookPages
        
        print("当前书籍的颜色:\(color), 当前书籍的页码数:\(pages)")
        
        //协议中的实例方法
        mark.markLiteraryBooks()
        
        /* 打印信息:
         协议的实例计算属性,设置book的pages:22
         协议的实例计算属性,读取book的pages:22
         当前书籍的颜色:blue, 当前书籍的页码数:22
         放入文学类书籍中的 book mark
         Bookmark deinit
        */
    }
    
    //使用协议中的静态属性与静态方法
    func useStaticProtocols(){
        
        //协议中的静态属性
        let size = Bookmark.bookSize
        print("size的标准尺寸:\(size)")
        
        //协议中的静态方法
        Bookmark.cleanBookMark()
        
        /* 打印信息
         size的标准尺寸:(20, 20)
         清理一下当前的 book mark
        */
    }
    
    //协议与扩展的结合使用
    func useExtensionProtocols(){
        
        let acd = AirConditioner()
        acd.log()   //show this log
        
    }
}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:46:08  更:2022-04-24 09:47:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:06:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码