当前位置: 首页 > news >正文

iOS开发 Swift 速记7:结构体和类

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客

C#是我多年以来的业余爱好,新搞的东西能用C#的就用C#了。


系列入口:iOS开发 Swift 速记1:变量和基本数据类型-CSDN博客

        怀疑看的资料不行,含混不清。

目录

一、结构体和类

二、属性

三、属性包装器

四、类属性和方法(静态属性和方法)

五、下标方法

六、构造方法

七、析构方法

八、继承

代码


一、结构体和类


    struct 结构体 不能继承 除了类都是值类型
    class 类 类是引用类型 比较用 ===
    类属性必须有初值,要么直接指定,要么用构造函数init
    类的实例即使是let一样能修改属性(为了摆脱指针引入了多少奇怪东西啊)
    lazy var 延时构造(非线程安全 谁想出来的啊)


二、属性


    存储属性 变量(常量)var 属性名:类型 = 初值 {willSet{语句} didSet{语句}}
    监听器默认参数名newValue oldValue 可以用(新名字)来修改
    初始化不会触发监听器
    计算属性 var 属性名:类型{get{语句} set{语句}} set参数为newValue 可以没有set(即只读)
    只读计算属性可以简写 var 属性名:类型{语句}
    计算属性没有监听器


三、属性包装器


    定义 @propertyWarpper struct 包装器名称{属性模板定义}
    使用 @包装器名称 var 属性名:类型


四、类属性和方法(静态属性和方法)


    static 通过 类名.属性和方法名 访问
    普通类方法里self指自身实例,静态方法里指自身类
    类 static func 不可被子类覆盖 class func 可以被子类覆盖
    覆盖要加override
    class的方法可以修改属性,struct的方法修改需要 mutating func 


五、下标方法


    subscript为下标方法([]不是运算符),类似计算方法


六、构造方法


    init 不需要func,没有返回值
    class 所有存储属性都有默认值时隐含生成无参init
    struct 没有定义init时隐含生成以所有属性为参数的init
    convenience init 便利构造方法,最终必须调用普通构造方法(指定构造方法,没有修饰的)
    可失败构造方法 init? 根据需要返回nil
    必要构造方法 required 子类必须实现


七、析构方法


    deinit


八、继承


    class 类名:基类名
    super指代基类

代码


struct S
{var a:Intvar b:Int
}
class C
{var a:Int = 0 {willSet{print("newValue \(newValue)")}didSet{print("oldValue \(oldValue)")}}var b:Int = 0
}
let x = C()
print(x.a)
x.a += 1
print(x.a)

(这里是文档结束)

http://www.dtcms.com/a/293775.html

相关文章:

  • ToBToC的定义与区别
  • js面试题 高频(1-11题)
  • split() 函数在 Java、JavaScript 和 Python 区别
  • HUAWEI Pura80系列机型参数对比
  • 自学嵌入式 day33 TCP、HTTP协议(超文本传输协议)
  • MySQL深度理解-深入理解MySQL索引底层数据结构与算法
  • Hexo - 免费搭建个人博客03 - 将个人博客托管到github,个人博客公开给大家访问
  • Day01_C++
  • 基于 MaxScale 实现 MySQL 读写分离
  • 使用Imgui和SDL2做的一个弹球小游戏-Bounze
  • 3.6 常见问题与调试
  • 编程语言Java——核心技术篇(二)类的高级特性
  • Semantic Kernel实现调用Kernel Memory
  • 华为云数据库 GaussDB的 nvarchar2隐式类型转换的坑
  • Python-初学openCV——图像预处理(一)
  • C++刷题 - 7.23
  • 开源 Arkts 鸿蒙应用 开发(九)通讯--tcp客户端
  • 在 Ubuntu 20.04.5 LTS 系统上安装 Docker CE 26.1.4 完整指南
  • Spring Cloud Alibaba Sentinel 基本工作原理源码阅读
  • MACOS安装配置Gradle
  • 国产数据库转向 “融合” 赛道:电科金仓的下一代形态定义之路
  • 基于Matlab传统图像处理技术的车辆车型识别与分类方法研究
  • 资本押注会成长的玩具,AI潮玩赛道开始升温
  • 华为云ELB(弹性负载均衡)持续报异常
  • 永磁同步电机控制算法--弱磁控制(负载能力最大化的定交轴)
  • 【C++】C++ 的入门语法知识1
  • 在easyui中如何设置自带的弹窗,有输入框
  • 解决Spring事务中RPC调用无法回滚的问题
  • 零基础学编程,编程从入门到精通系列教程,附:编程工具箱之时间计算构件的用法#零基础自学编程 学习计划#新手学编程 高效学习方法
  • HF83311_VB1/HF83311Q_VB1:高性能USB HiFi音频解码器固件技术解析