【swift】swift quick start
一、常量和变量
常量let,变量var
也可以用于确定数组和字典的不可变和可变
二、数据类型:
Int:整数类型,可表示有符号整数或无符号整数,分别使用Int和UInt表示。
Float:单精度浮点数类型,用于存储小数。
Double:双精度浮点数类型,用于存储更大的小数,精度更高。
Bool:布尔类型,表示真或假。
String:字符串类型,用于存储文本数据。
Character:字符类型,用于存储单个字符。
Array:数组类型,用于存储有序集合。
Dictionary:字典类型,用于存储键值对集合。
Set:集合类型,用于存储无序集合。
Optional:可选类型,用于表示值可能不存在的情况。
四则运算
类型匹配才能加减乘除
或者有些情况需要(Type)强转类型
数据类型里需要特别注意的几个:
String
遍历: for in
拼接: +
格式化输出 : let str = String(format: "%@=%@", key, value)
还有一种\()的快速输出方法 var str = "制作一杯\(type)咖啡。"
模版语法:let string = "”" Hello Swift! Hello Swift!Hello Swift! """
Array
定义和初始化:
// let代表不可变数组
let array:Array<String>
// var代表可变数组
var array: [String]
然后初始化的时候字面量给值就可以了
后边的类型可给可不给
增:
append 删:
remove(at: 0) // 删除第一个元素并将其返回
removeLast() // 删除最后一个元素并将其返回
removeFirst()改:
array[0] = "asd"插入:
myArray.insert(7, at: 0) // 在第一个位置插入元素 7数组长度:
.count可以拿到长度拼接:
+遍历for in 和map闭包都可
//for in
for element in myArray { print(element)
}//map
let result = numbers.map({ (number: Int) -> Int inlet result = number * 2return result
})
Dictionary(map)
定义和初始化:
var dict1: Dictionary<Int, String>
var dict2: [Int: String]
然后初始化的时候字面量给值就可以了
后边的类型可给可不给
// 添加数据
dict["height"] = 1.88
// 删除字段
dict.removeValueForKey("height”)
// 修改字典
dict["name"] = "花花”
// 查询字典
dict["name”]//合并
var dict1 = ["name" : "花花", "age" : 18]
var dict2 = ["height" : 1.8]
// 字典不可以直接相加合并
for (key, value) in dict2 { dict1[key] = value
}//遍历
// 遍历字典中所有的值
for value in dict.values { print(value)
}
// 遍历字典中所有的键
for key in dict.keys {print(key)
}
// 遍历所有的键值对
for (key, value) in dict { print(key) print(value)
}
Optional
Pre: nil
在 Swift 中,nil 是一个特殊的值,用于表示“没有值”。nil 是一个可选类型(Optional),它可以用于表示一个值不存在的情况。
在 Swift 中,所有的变量和常量都必须要初始化,即使是一个空字符串或者空数组。如果你没有为一个变量或常量赋值,Swift 会报错。但是,当你使用可选类型时,可以将其初始化为 nil,表示该值目前不存在。这个特性很有用,因为有时你并不知道一个变量或常量的初始值是什么。
1)定义可选类型
在 Swift 中,可选类型的定义使用 ? 符号。例如,下面的代码定义了一个可选类型的字符串变
var optionalString: String?
这个字符串可以存储一个字符串或者nil
2)赋值和访问
optionalString = "Hello, Swift!"
访问需要解包,一般可以借助if else
if let string = optionalString { print(string)
} else { print("optionalString is nil”)
}
3)强制访问用!直接赋值
var optionalString: String?
optionalString = "Hello, Swift!"
let string = optionalString!
print(string)
三、条件判断和循环
1.条件语句
首先if和for都不需要括号,这里写法跟python很像
If就常规用:
let a = 10
if a > 9 { print(a)
}
但是这里不要直接if某个值,eg if(a), 要像上边一样加上条件判断
三目运算符:
var result = a > b ? a : b
switch:
不喜欢用,一般都是if单个名中
注意switch有一点很先进,swift中的switch不需要break,自动加了
再也不用为忘加break担心了
let sex = 0
switch sex { case 0 : print("男”) case 1 : print("女”) default : print("其他”)
}
guard:
语法很奇怪,不建议用
var age = 18
func online(age : Int) -> Void { //注意这里意思的<18的判断guard age >= 18 else { print("回家去”) return } print("可以上网”)
}
online(age)
2.循环语句
for in就够了
for i in 0...10 { print(i)
}
四、函数
func 函数名(参数列表) -> 返回值类型 { 代码块 return 返回值
}
没有返回值可以写void或者不写
默认参数应该是比较常用的一种状态:
func makecoffee(type :String = "卡布奇诺") -> String { return "制作一杯\(type)咖啡。”
}
至于可变参数,实际上是解构一个数组:
func sum(numbers:Double...) -> Double {}
sum(100.0, 20, 50)
五、 闭包
带参数的闭包:
{(parameters) -> return type in// code
}
Eg1:
let greet = {(name: String) -> String inreturn "Hello, \(name)!"
}
print(greet("Swift"))
// 输出:"Hello, Swift!"
Eg2:
let numbers = [1, 2, 3, 4, 5]let result = numbers.map({ (number: Int) -> Int inlet result = number * 2return result
})print(result)
// 输出:[2, 4, 6, 8, 10]
swift中解决weak strong dance的方法
weak stong dance主要是关于内外self的区别,方便后期释放
httpTool.loadRequest { [weak self] in self.view.backgroundColor = UIColor.redColor()
}
// [weak self] () -> () in ,因为()=>()都为空省略掉了
六、懒加载
lazy关键词,只会被实例化一次
lazy var array : [String] = { () -> [String] in return ["a", "b", "c”]
}() //这里直接()执行赋值了'
七、类
class 类名 : SuperClass { // 定义属性和方法
}
⚠️ 定义的类,可以没有父类.那么该类是 rootClass
类的属性有以下几种
- 存储属性:存储实例的常量和变量
- 计算属性:通过某种方式计算出来的属性
- 类属性:与整个类自身相关的属性
存储属性,就是正常在类里边定义的属性值
计算属性的关键就是setter和getter,间接获取和改变其他属性
类属性可以直接类名调用加了,static
eg:
class Student : NSObject { // 存储属性 var age : Int = 0 var name : String? var englishScore : Double = 0.0 var mathScore : Double = 0.0 // 计算属性 var averageScore : Double { get { return (englishScore + mathScore) / 2 } // 没有意义.newValue是系统分配的变量名,内部存储着新值 set { self.averageScore = newValue } } // 类属性 static var corseCount : Int = 0
}
// 设置类属性的值
Student.corseCount = 3
类的构造函数:
- 创建一个类时,必然会调用一个构造函数
- 即便是没有编写任何构造函数,编译器也会提供一个默认的构造函数。
- 如果是继承自NSObject,可以对父类的构造函数进行重写,当然也可以自己定义
Eg: 初始化的时候给属性赋值
class Person: NSObject { var name : String? var age : Int = 0 // 自定义构造函数,会覆盖init()函数 ,省略重定义的overrideinit(name : String, age : Int) { self.name = name self.age = age}
}
// 创建一个Person对象
let p = Person(name: "花花", age: 18)
相关文章:
【swift】swift quick start
一、常量和变量 常量let,变量var 也可以用于确定数组和字典的不可变和可变 二、数据类型: Int:整数类型,可表示有符号整数或无符号整数,分别使用Int和UInt表示。 Float:单精度浮点数类型,用于…...
浅谈volatile关键字
文章目录1.保证内存可见性2.可见性验证3.原子性验证4.原子性问题解决5.禁止指令重排序6.JMM谈谈你的理解6.1.基本概念6.2.JMM同步规定6.2.1.可见性6.2.2.原子性6.2.3.有序性6.3.Volatile针对指令重排做了啥7.你在哪些地方用过Volatile?volatile是Java提供的轻量级的…...
10 种 Spring事务失效场景
10 种 Spring事务失效场景 1.概述 Spring针对Java Transaction API (JTA)、JDBC、Hibernate和Java Persistence API(JPA)等事务 API,实现了一致的编程模型,而Spring的声明式事务功能更是提供了极其方便的事务配置方式,配合Spring Boot的自动…...
重读《DOOM启世录》
许多游戏开发者都是网瘾少年,抱着对游戏的热爱进入游戏行业,在经历996的加班加点,买房的压力,浮躁同样跟随着我们,我们是否还热爱着自己的事业,我们不是天才,也成不了卡马克,但是我们…...
巧用性格上的差异来组建团队
你好,我是得物 App 交易平台及中间件平台的 Team Leader Alan。 组建团队过程中,你有没有遇到过类似的场景:团队中某些人之间总是互相不对付、气场不合,不管是日常沟通中还是方案对齐,总是会出现面红耳赤的场面。 从…...
Leetcode11. 盛最多水的容器
一、题目描述: 给定一个长度为 nnn 的整数数组 heightheightheight 。有 nnn 条垂线,第 iii 条线的两个端点是 (i,0)(i, 0)(i,0) 和 (i,height[i])(i, height[i])(i,height[i]) 。 找出其中的两条线,使得它们与 xxx 轴共同构成的容器可以容…...
Java笔记026-集合/数组、Collection接口、ArrayList、Vector、LinkedList
集合集合的理解和好处保存多个数据使用的是数组,分析数组的弊端数组1、长度开始必须指定,而且一旦指定,不能更改2、保存的必须为同一类型的元素3、使用数组进行增加/删除元素的示意代码-比较麻烦Person数组扩容示意代码Person[] pers new Pe…...
Hive学习——分桶抽样、侧视图与炸裂函数搭配、hive实现WordCount
目录 一、分桶抽样 1.抽取表中10%的数据 2.抽取表中30%的数据 3.取第一行 4.取第10行 5.数据块抽样 6.tablesample详解 二、UDTF——表生成函数 1.explode()——炸裂函数 2.posexpolde()——只能对array进行炸裂 3.inline()——炸裂结构体数组 三、UDTF与侧视图的搭…...
大数据算法
1. TOP K 算法 有10个⽂件,每个⽂件1G,每个⽂件的每⼀⾏存放的都是⽤户的 query,每个⽂件的 query 都可能重复。要求你按照 query 的频度排序。 方法1: 顺序读取10个⽂件,按照 hash(query)%10 的结果将 query 写⼊到…...
非暴力沟通读书笔记
浅读《非暴力沟通》,本书对于沟通的方式总结成了一个方法论,从13个章节去概述非暴力沟通的方法和重点。其中最重要的是非暴力沟通四要素,观察、感受、需要、请求。同时在沟通中注意观察,投入爱,重视倾听的力量…...
代码随想录【Day21】| 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先
530. 二叉搜索树的最小绝对差 题目链接 题目描述: 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 提示:树中至少有 2 个节点。 难点: 解答错误!仅考虑了…...
注意啦,面试通过后,别忘了教师资格证认定
所有要「教师资格证认定」教程的宝子们看过来面试合格的小伙伴都可以进行认定工作 . 认定时间 查询各省份认定公告,确定认定时间范围。以下是公告汇总网址(https://www.jszg.edu.cn/portal/qualification_cert/dynamics?id21691) 认定次数 每…...
【LeetCode】No.154. 寻找旋转排序数组中的最小值 II -- Java Version
题目链接:https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array-ii/ 1. 题目介绍(154. 寻找旋转排序数组中的最小值 II) 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后࿰…...
RestTemplate远程调用
我们现在项目中使用的RPC远程调用技术是Dubbo实际上除了Dubbo技术之外,还有很多远程调用的方法它们有些调用的思想都和Dubbo完全不同Dubbo是SpringCloudAlibaba提供的功能强大的RPC框架但是Dubbo功能也有限制,如果我们想调用的方法不是我们当前项目的组件或功能,甚至想调用的方…...
registerForActivityResult使用
目录 针对 activity 结果注册回调 启动 activity 以获取其结果 在单独的类中接收 activity 结果 测试 创建自定义协定 registerForActivityResult()是startActivityForResult()的替代,简化了数据回调的写法 启动另一个 activity&#x…...
工作中,python真的有用吗?
普通上班族学Python有用吗? 那么,我也在这里提出一个问题:Python究竟适不适合办公人士来学习,以及学了之后究竟能不能给我的工作来带质一般的飞跃? 以我的亲身经历为例,我可以很负责的告诉大家,…...
固态继电器控制电路
固态继电器控制电路 固态继电器(SSR)的种类和型号很多,因此其输入控制方法和控制电路也相应众多。固态继电器(SSR)的共同特点在于驱动电流或驱动电压小,即只需输入一个小信号即可控制SSR的开关。 如果需要…...
数仓、数据湖、湖仓一体、数据网格的探索与研究
第一代:数据仓库 定义 为解决数据库面对数据分析的不足,孕育出新一类产品数据仓库。数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策和信息的全局共享。 数…...
设计模式系列 - 备忘录模式
介绍&定义 备忘录模式,也叫快照(Snapshot)模式,英文翻译是 Memento Design Pattern。在 GoF 的《设计模式》一书中,备忘录模式是这么定义的: Captures and externalizes an object’s internal state…...
详细介绍React生命周期和diffing算法
事件处理 1.通过onXxx属性指定事件处理函数(注意大小写) React使用的是自定义(合成)事件, 而不是使用的原生DOM事件 —— 为了更好的兼容性;React中的事件是通过事件委托方式处理的(委托给组件最外层的元素) ——为了的高效。 2.通过event.target得到发生事件的DOM…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
