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

Swift-语法基础

 一、声明

变量声明 

以关键字 var 开头的声明引入变量,该变量在程序执行期间可以具有不同的值。

var str: String = "hello"
str = "hello, world"

常量声明

以关键字 let 开头的声明引入只读常量,该常量只能被赋值一次。

let str: String = "hello"

二、类型

Int类型

Int 整数类型,又包含Int8、Int16、Int32、Int64。

let intNum: Int = 12
let maxInt16: Int16 = Int16.max
let MinInt32: Int32 = Int32.min

Float类型

Float 浮点数类型。

let floatNum: Float = 3.14

Bool类型

Bool 类型由 true 和 false 两个逻辑值组成。

let success: Bool = true
if success {// do something
}

String类型

String 代表字符序列,可以使用转义字符来表示字符。

let str1 = "title"
let str2 = "detail"
let str3 = str1 + " " + str2;let isContain = str3.contains(str1)let content = "content: \(str3)"
print(content)let intNum = Int("12") // 12
let floatNum = Float("3.14") // 3.14_ = " every body ".replacingOccurrences(of: " ", with: "") // 'everybody'
_ = " every body ".trimmingCharacters(in: .whitespaces) // 'every body'let hasPrefix = "every one".hasPrefix("every") // true
let hasSuffix = "every one".hasSuffix("one") // true

Array类型

Array 类型是由可赋值给数组声明中指定的元素类型的数据组成的对象。

var arr1 = Array<String>()
arr1.append("red")
arr1.append("blue")
arr1.removeLast()
let isEmpty = arr1.isEmpty // ["red"]var arr2 = [String]()
arr2.append("black")
arr2.append("gray")
let obj = arr2[0] // "black"
let count = arr2.countlet arr3 = arr1 + arr2 // ["red", "black", "gray"]
let isContain = arr3.contains("gray") let arr4 = Array(arr3[1...]) // ["black", "gray"]let segments = "m.baidu.com".components(separatedBy: ".") // ["m", "baidu", "com"]
let host = components.joined(separator: ".") // "m.baidu.com"

Dictionary类型

Dictionary 是 HashMap 结构,存储 key-value 键值对。

var dic1 = [String: String]()
dic1["hello"] = "world"
dic1.removeValue(forKey: "hello")
_ = dic1.isEmptyvar dic2: [Int: Int] = [1:1, 2:2, 3:3]
dic2[4] = 4
print("count: \(dic2.count)")

Void类型

Void 类型用于指定函数没有返回值。

func getDeviceId() -> Void {// do somethind
}

Enum类型

enum 枚举类型用于声明一组命名的常数。

// 声明
enum Direction {case LEFTcase RIGHTcase TOPcase BOTTOM
}// 应用
let direction = Direction.LEFT

三、语句

if语句

if condition {// do something
}

if 结合 let 的应用场景 

// 常规的非空判断
func execute(value: String?) {if value != nil {print("\(value!.count)")}
}// 结合let的非空判断
func execute(value: String?) {if let value = value {print("\(value.count)")}
}

switch语句

switch type {case 0: // do somethingcase 1, 2:// do somethingdefault:// do something
}

for语句

let arr: [String] = ["a", "b", "c", "d", "e"]
for i in 0..<arr.count {let str = arr[i]if str == 'd' {break}// do something
}
let arr: [String] = ["a", "b", "c", "d", "e"]
for str in arr {if str == 'b' {continue}// do something
}
let arr: [String] = ["a", "b", "c", "d", "e"]
arr.forEach{ obj in// do something
}arr.enumerated().forEach { (idx, obj) in// do something
}let dic: [Int: Int] = [1:1, 2:2, 3:3]
dic.forEach { (key, value) in// do something
}

while语句

while condition {// do something
}

try-catch语句

do {try // do something
} catch {print(error)
}

四、运算符

三元运算符

let str = value ? value : ""let str1 = value ?? ""

加/减运算符

let i = 0
i += 1 // 等价与 i = i+1let j = 10
j -= 1 // 等价与 j = j-1

可选链运算符

1)变量/属性的定义

class Article {var title: string = "标题"var summary: String?init() {self.summary = "简介"}func execute(hasSign: Bool) {_ = self.title.count_ = self.summary?.countvar sign: String? // 先声明if hasSign {sign = "署名" // 再赋值}let signLength = sign?.count ?? 0}
}

2)方法传参

func execute(_ str1: String, _ str2: String?) -> String {return str1 + (str2 ?? "")
}execute("a", nil)

五、函数

常规的函数声明/调用。

func execute(arg1: String, arg2: String?) -> Bool {// do somethingreturn true
}execute(arg1: "title", arg2: nil)
func execute(_ str1: inout String, _ str2: String) {str1 += str2
}var str1 = "he"
execute(&str1, "llo")

 带回调的函数声明/调用。

func execute(callBack: ((String) -> Void)?) {if let callBack = callBack {callBack("success")}
}execute { result in// do something
}

六、类

类声明

引入一个新类型,并定义其字段、方法和构造函数。

class Car {var name: String = ""var style: String = ""var price: Float?private var identify: String?init() { ... }func execute() {let detail = "\(self.name) \(self.style)"print(detail)}
}

构造函数

1)不带参数

init() {// do something
}

2)带参数

init(name: String, style: String) {self.name = nameself.style = style// do something
}

 3)调用时机

// 不带参数
let car1 = Car() 
car1.name = "Tesla"
car1.style = "Model 3"// 带参数
let car1 = Car(name: "Tesla", style: "Model 3")

实例方法

class Car {init() { ... }func execute() {// do something} 
}Car().execute()

类方法

class Car {class func execute() {// do something} 
}Car.execute()

Getter/Setter方法

class Car {private var _name: String = ""private var _price: Float?var name: String {get {return _name}set {_name = newValue}}var price: Float? {get {return _price}set {_price = newValue}}func execute() {self.name = "BYD" // setprint(self.name) // get}
}

类继承

class BydCar: Car {var Batterylife: Int?override init() {super.init()self.name = "Byd"}override func execute() {super.execute()// do something}
}

方法重写

class BydCar: Car {override func execute() {// 重写execute方法}
}

方法重载

class BydCar: Car {func execute(_ argument: [String: String]) {// 重载execute方法(修改入参)}func execute(_ argument: String) -> Bool {// 重载execute方法(修改入参/出参)}
}

协议声明

protocol CarInterface {func drive()
} 

协议继承

protocol BydInterface: CarInterface {func automaticParking()
} 

协议实现

class BydCar: Car, BydInterface {override init() {super.init()self.name = "Byd"}func drive() {// drive }func automaticParking() {// automatic parking}
} 

静态属性

// 声明
class EventConstants {static let AVAILABLE    = truestatic let LOAD_EVENT   = "onLoad"static let UNLOAD_EVENT = "onUnload"
}// 应用
let available = EventConstants.AVAILABLE

静态方法

// 声明
class DeviceUtils {static func getDeviceName() -> String {return "iPhone 15"}
}// 应用
let deviceName = DeviceUtils.getDeviceName()

本文参考于 Swift 官方文档:Swift Documentation

相关文章:

Swift-语法基础

一、声明 变量声明 以关键字 var 开头的声明引入变量&#xff0c;该变量在程序执行期间可以具有不同的值。 var str: String "hello" str "hello, world" 常量声明 以关键字 let 开头的声明引入只读常量&#xff0c;该常量只能被赋值一次。 let s…...

面向对象进阶:多态、内部类、常用API

目录 Java中的接口 Java中的内部类 常用API StringBuilder类 Java高级面向对象编程 在这篇博客文章中&#xff0c;我们将探索Java中的高级面向对象编程概念&#xff0c;包括接口、内部类和常用API。每个概念都将通过代码示例来演示它们的应用。 Java中的接口 什么是接口&…...

寸(英寸)、码、斤、公顷等日常中大概的换算单位你清楚吗

这些单位和概念是我们日常生活和工作中不可或缺的部分&#xff0c;理解它们的用途和转换关系可以让我们更有效地处理信息、进行交流和解决问题。 1、寸&#xff08;英寸&#xff09; 1寸&#xff08;或英寸&#xff09;等于0.0254米&#xff0c;2寸等于&#xff1a;20.0254&a…...

Python面试宝典第26题:最长公共子序列

题目 一个字符串的子序列是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不删除任何字符&#xff09;后组成的新字符串。比如&#xff1a;"ace" 是 "abcde" 的子序列&#xff0c;但 "…...

接口测试学习笔记2

一、复习和扩展&#xff1a; 1、金字塔测试模型 UI测试 -- 黑盒 Service 服务层--函数之间的调用 灰盒 接口测试 Unit单元层--白盒测试 趋势&#xff1a;逐步向下发展 测试优先、测试驱动 -- 先考虑怎么测&#xff0c;再考虑怎么开发 满足软件测试的可控范围 2、…...

vue3修改带小数点的价格数字:小数点的前后数字,要分别显示成不同颜色和大小!已经封装成组件了!

需求&#xff1a; 修改带小数点的价格数字&#xff1a;小数点的前后数字&#xff0c;要分别显示成不同颜色和大小&#xff01;已经封装成组件了&#xff01; 效果&#xff1a; 前面大&#xff0c;后面小 代码&#xff1a; 组件&#xff1a; <!--修改小数点前后数字不同…...

JVM(Java虚拟机) - JVM内存分配与内存管理

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有疑问和建议&#xff0c;请私信或评论留言&#xff01; 前言 Java虚拟机&…...

Linux中vim的基本介绍和使用

善为理者&#xff0c;举其纲&#xff0c;疏其网。 vim 1、vim介绍2、命令模式详情3、底行模式详情4、困难问题5、历史存疑问题6、vim配置问题6、1、配置的原理6、2、一键式配置 1、vim介绍 如果我面想要在Linux上编写代码的话&#xff0c;我就需要vim来帮助我们编写代码。但是…...

宝塔面板上,安装rabbitmq

废话不多说&#xff0c;直接上干货&#xff01; 第一步&#xff1a;登录宝塔账号&#xff0c;在软件商店里搜索 第二步&#xff1a;点击设置 第三步&#xff1a;已经完成了&#xff0c;还看啥&#xff01;...

【Docker系列】Docker 镜像管理:删除无标签镜像的技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

数据采集器

目录 1. 采集Redis 2. 采集MySQL 3. 采集容器 1. 采集Redis 出口商和集成 |普罗 米修斯 (prometheus.io) 发布 奥利弗006/redis_exporter (github.com) 在目标机器上安装redis 上传redis采集器包redis_exporter-v1.53.0.linux-amd64.tar.gz [rootharbor opt]# tar -xf …...

小红书0510笔试-编程题

解题思路&#xff1a; 先射击左边和先射击右边两种情况&#xff0c;就是2*1/n*(n-1)的概率。 解题思路&#xff1a; 枚举所有的评论作为最小值&#xff0c;按评论从大到小排序&#xff0c;每次遍历到的都是最小值。要想得到以该评论为最小值的最大优秀度&#xff0c;就要维护一…...

2024年热门开放式耳机评测!悠律、韶音、声阔到底该选谁?

开放式耳机选购技巧篇&#xff0c;可参考选购&#xff01; 作为一名数码评测博主&#xff0c;这两年用过的开放式耳机不下50款了&#xff0c;市面上的开放式耳机众多&#xff0c;很多人不知道该如何选择&#xff0c;其实选购都是有一定的技巧和规律性的&#xff0c;看配置就能…...

计算机毕业设计选题推荐-智慧物业服务系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

新手小白学习PCB设计,立创EDA专业版

本教程有b站某UP主的视频观后感 视频链接&#xff1a;http://【【教程】零基础入门PCB设计-国一学长带你学立创EDA专业版 全程保姆级教学 中文字幕&#xff08;持续更新中&#xff09;】https://www.bilibili.com/video/BV1At421h7Ui?vd_sourcefedb10d2d09f5750366f83c1e0d4a…...

查物流信息用什么软件

在电子商务日益繁荣的今天&#xff0c;快递物流信息的查询成为了我们日常生活中不可或缺的一部分。无论是网购达人还是商家&#xff0c;都需要随时掌握货物的物流动态。然而&#xff0c;如何快速、准确地查询物流信息却是一个令人头疼的问题。今天&#xff0c;我将为大家介绍一…...

(40)温度传感器

文章目录 前言 1 设置 2 记录 3 参数说明 前言 ArduPilot 已经有许多可能的温度报告来源&#xff1a;电调&#xff0c;智能电池&#xff0c;电机 EFI&#xff0c;这些独立的传感器可以用来取代 ArduPilot 中已经存在的那些设备温度报告。它们也可以只是被记录下来。 ArduP…...

【靶场实操】sql-labs通关详解----第二节:前端页面相关(Less-11-Less-17)

SQL注入攻击是一种针对Web应用程序的安全漏洞&#xff0c;那么自然&#xff0c;SQL注入攻击也和前端页面息息相关&#xff0c;用户输入未被正确处理、动态查询的构建、前端JavaScript代码错误&#xff0c;等等我问题都可能造成安全威胁。 在上一节&#xff0c;我们了解了基础的…...

样式与特效(2)——新闻列表

1.盒子模型的边距概念 ) Margin-top 上面 Margin-bottom 底部 Margin-right 右边 Margin-left 左边 Margin : 10px &#xff08;上下左右都是10px&#xff09; Margin &#xff1a;10px,20px (上下边距10px 左右20px) CSS里面最重要的属性之一 将页面理解成…...

NICE Seminar(2023-07-16)|演化算法的理论研究到底有什么用?(南京大学钱超教授)

模式定理&#xff08;Schema Theorem&#xff09; 模式定理&#xff08;Schema Theorem&#xff09;是遗传算法&#xff08;Genetic Algorithm, GA&#xff09;的重要理论基础&#xff0c;由约翰霍兰德&#xff08;John Holland&#xff09;在1975年提出。它描述了具有特定模式…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...