当前位置: 首页 > 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

http://www.lryc.cn/news/413532.html

相关文章:

  • 面向对象进阶:多态、内部类、常用API
  • 寸(英寸)、码、斤、公顷等日常中大概的换算单位你清楚吗
  • Python面试宝典第26题:最长公共子序列
  • 接口测试学习笔记2
  • vue3修改带小数点的价格数字:小数点的前后数字,要分别显示成不同颜色和大小!已经封装成组件了!
  • JVM(Java虚拟机) - JVM内存分配与内存管理
  • Linux中vim的基本介绍和使用
  • 宝塔面板上,安装rabbitmq
  • 【Docker系列】Docker 镜像管理:删除无标签镜像的技巧
  • 数据采集器
  • 小红书0510笔试-编程题
  • 2024年热门开放式耳机评测!悠律、韶音、声阔到底该选谁?
  • 计算机毕业设计选题推荐-智慧物业服务系统-Java/Python项目实战
  • 新手小白学习PCB设计,立创EDA专业版
  • 查物流信息用什么软件
  • (40)温度传感器
  • 【靶场实操】sql-labs通关详解----第二节:前端页面相关(Less-11-Less-17)
  • 样式与特效(2)——新闻列表
  • NICE Seminar(2023-07-16)|演化算法的理论研究到底有什么用?(南京大学钱超教授)
  • 优盘驱动器未格式化?数据恢复全攻略
  • (超全)Kubernetes 的核心组件解析
  • 前端常用的【设计模式】和使用场景
  • QT下载问题:Download from your IP address is not allowed
  • 自建数据库VS云数据库
  • 【大数据开发语言Scala的入门教程】
  • docker部署kkfileview文件在线预览服务
  • 朱锐 | 生命图像中的时间和意识
  • pytorch: cpu,cuda,tensorRt 推理对比学习
  • android 音频播放器,(一)SoundPool音频播放实例
  • AVL解析