Swift面向对象编程

类的定义与实例化: Swift中定义一个类使用class关键字,类的属性和方法都写在大括号内。示例代码如下:
class MyClass {
    var property1: Int
    var property2: String
    
    init(property1: Int, property2: String) {
        self.property1 = property1
        self.property2 = property2
    }
    
    func myMethod() {
        // 方法实现
    }
}

let myObject = MyClass(property1: 1, property2: "abc")

继承: Swift中使用冒号(:)表示继承关系。子类可以继承父类的属性和方法,并且可以重写父类的方法。示例代码如下:
class MySubclass: MyClass {
    override func myMethod() {
        // 重写父类方法的实现
    }
}

多态: Swift中的多态通过方法重写来实现。子类可以重写父类的方法,使其具有不同的实现。多态可以提高代码的灵活性和可维护性。示例代码如下:
class Animal {
    func makeSound() {
        // 父类方法的实现
    }
}

class Dog: Animal {
    override func makeSound() {
        // 子类重写父类方法的实现
        print("汪汪汪")
    }
}

class Cat: Animal {
    override func makeSound() {
        // 子类重写父类方法的实现
        print("喵喵喵")
    }
}

let animal: Animal = Dog()
animal.makeSound()   // 输出:汪汪汪

let anotherAnimal: Animal = Cat()
anotherAnimal.makeSound()   // 输出:喵喵喵

属性与访问控制: Swift中的属性可以分为计算属性和存储属性。计算属性通过getter和setter方法来实现,而存储属性在内存中存储它们的值。属性也可以设置访问控制级别,来控制属性的可见性。示例代码如下:
class MyOtherClass {
    var myProperty: Int = 0   // 存储属性
    var myComputedProperty: Int {
        get {
            // getter方法的实现
            return 10
        }
        set {
            // setter方法的实现
            myProperty = newValue
        }
    }
    
    private var privateProperty: String = "private"   // 私有属性
    
    func myMethod() {
        print(privateProperty)   // 在类内部可以访问私有属性
    }
}

let otherObject = MyOtherClass()
otherObject.myProperty = 5
print(otherObject.myProperty)   // 输出:5
print(otherObject.myComputedProperty)   // 输出:10

初始化方法: Swift中使用init关键字定义初始化方法。初始化方法用于创建对象并对对象的属性进行初始化。示例代码如下:
class MyClass {
    var property1: Int
    var property2: String
    
    init(property1: Int, property2: String) {
        self.property1 = property1
        self.property2 = property2
    }
}

let myObject = MyClass(property1: 1, property2: "abc")

析构方法: Swift中的析构方法使用deinit关键字定义,用于在对象被销毁前执行清理工作。示例代码如下:
class MyClass {
    deinit {
        // 析构方法的实现
    }
}

var myObject: MyClass? = MyClass()
myObject = nil   // 对象被销毁,调用析构方法

以上是Swift面向对象编程的一些基本概念和语法。希望对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/551607.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

字节8年经验之谈 —— 接口测试框架接入性能测试实践分享!

1. 前言 现如今接口测试在软件质量行业中的地位,已经越来越重要,相对于上层的UI自动化测试和下层的单元测试,接口测试的“低”投入、“高”回报,也成了绝大多数质量保障实践的首选。 在开展接口测试时,往往很多时候都…

python使用redis存储时序数据

import redisdef ts_demo():"""时序数据存储RedisTimeSeries测试"""# 连接到Redisr redis.Redis(hostlocalhost, password"xxxx", port63790, db0)r1 r.ts()# print(r1.get("ts_key"))# print(r.exists(ts_key))# # 清空键…

PyQt5 快速入门

PyQt5 简介和开发环境搭建 简介 PyQt是一个GUI小部件工具包。 它是Qt的Python接口, Qt是最强大,最受欢迎的跨平台GUI库之一。 PyQt由RiverBank Computing Ltd.开发。最新版本的PyQt可从其官方网站下载 - riverbankcomputing.com PyQt API是一组包含大…

【leetcode】双指针算法技巧——滑动窗口

标题:【leetcode】双指针算法技巧——滑动窗口 水墨不写bug 正文开始: 滑动窗口介绍 滑动窗口是一种常用的算法技巧,用于解决一些涉及 连续子数组或子串 的问题。它的基本思想是 维护一个窗口,通过 在窗口内移动 来寻找满…

SD-WAN为什么能让网络运维更简单

在数字化浪潮席卷的今天,企业面临着网络规模的不断扩大、分支机构的广泛分布以及云服务需求的日益增长。企业目前的网络不足以达到这些要求,因而出现网络性能下降、运维复杂度剧增、成本攀升的问题。而SD-WAN(软件定义广域网)作为…

SASE:打造数据安全保障新模式

在企业纷纷拥抱数字业务的过程中,由于边缘计算、云服务、混合网络的逐渐兴起,使得本就漏洞百出的传统网络安全架构更加岌岌可危,而且远远无法满足企业数字业务的需要。 伴随企业全球化发展,企业的数据中心不再是用户与设备访问需…

socket编程——tcp

在我这篇博客:网络——socket编程中介绍了关于socket编程的一些必要的知识,以及介绍了使用套接字在udp协议下如何通信,这篇博客中,我将会介绍如何使用套接字以及tcp协议进行网络通信。 1. 前置准备 在进行编写代码之前&#xff…

Docker部署Prometheus+AlertManager实现邮件告警

文章目录 一、环境准备1、硬件准备(虚拟机)2、关闭防火墙,selinux3、所有主机安装docker 二、配置Prometheus1、docker启动Prometheus 三、添加监控节点1、docker启动node-exporter 四、Prometheus配置node-exporter1、修改prometheus.yml配置…

Docker构建Golang项目常见问题

Docker构建Golang项目常见问题 1 dockerfile报错:failed to read expected number of bytes: unexpected EOF2 go mod tidy: go.mod file indicates go 1.21, but maximum supported version is 1.17 1 dockerfile报错:failed to read expected number o…

鸿蒙语言TypeScript学习第18天:【泛型】

1、TypeScript 泛型 泛型(Generics)是一种编程语言特性,允许在定义函数、类、接口等时使用占位符来表示类型,而不是具体的类型。 泛型是一种在编写可重用、灵活且类型安全的代码时非常有用的功能。 使用泛型的主要目的是为了处…

【Linux】详解如何利用共享内存实现进程间通信

一、共享内存(Shared Memory)的认识 共享内存(Shared Memory)是多进程间共享的一部分物理内存。它允许多个进程访问同一块内存空间,从而在不同进程之间共享和传递数据。这种方式常常用于加速进程间的通信,因…

JS打包工具 Vite

Vite是 JS 新一代的打包的工具,它所解决的问题,是前端打包慢的问题,随着前端应用复杂度越来越大,项目文件越来越多,通常项目中都是使用 Webpack 进行打包,Webpack是个静态的打包工具,每次改动都…

9.Jetson AGX Orin protobuf验证

Jetson AGX Orin protobuf验证 前提已经安装好grpc 1:进入目录grpc/examples/cpp/helloworld下编译 make如果出现错误,protoc: Command not found。 进入/usr/local/bin与/usr/local/lib 均没发现protoc与libprotobuf。原来/grpc/third_party/protob…

C语言【指针】

1. 基本语法 1.1 指针变量的定义和使用(重点) 指针是一种数据类型,指针变量指向谁 就把谁的地址赋值给指针变量 1.2 通过指针间接修改变量的值 指针变量指向谁 就把谁的地址赋值给指针变量 可以通过 *指针变量 间接修改变量的值 1.3 const修饰的指针变量 语法…

C语言 【函数】

1.函数概述 函数是一种可重用的代码块&#xff0c;用于执行特定任务或完成特定功能 函数作用&#xff1a;对具备相同逻辑的代码进行封装&#xff0c;提高代码的编写效率&#xff0c;实现对代码的重用 2. 函数的使用 2.1 无参无返回值 #include <stdio.h>// 函数名…

【AAAI2024】点云的自适应邻域提取

论文标题&#xff1a;Point Deformable Network with Enhanced Normal Embedding for Point Cloud Analysis 论文地址&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/28497 两个创新点&#xff1a;可变邻域法向量提取 一、由固定邻居变为可变的邻域 二、最小二…

让一个元素在网页上跟随网页窗口大小变化始终保持上下左右居中

废话少说&#xff0c;直接上代码&#xff0c;懂的都懂&#xff1a; <!DOCTYPE html> <html style"font-size: 100px;"> <head><meta http-equiv"Content-Type" content"text/html;charsetUTF-8"><style type"te…

搭建第一个Web服务器(在eclipse或idea上部署Tomcat服务器)

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

开关电源测试流程有哪些?如何让测试更简单?

NSAT-8000电源综合测试系统适用于AC-DC、DC-DC电源模块的研发和产线测试&#xff0c;为电源模块测试提供自动化测试方案。用该系统测试开关电源&#xff0c;只需以下操作即可完成&#xff1a; 1. 登录测试系统 2. 在方案运行界面找到已搭建好的开关电源测试方案&#xff0c;点击…

Learn SRP 02

3.Editor Rendering 3.1Drawing Legacy Shaders 因为我们的管线只支持无光照的着色过程&#xff0c;使用其他不同的着色过程的对象是不能被渲染的&#xff0c;他们被标记为不可见。尽管这是正确的&#xff0c;但是它还是隐藏了场景中一些使用错误着色器的对象。所以让我们来渲…
最新文章