- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Swift心得笔记之运算符由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
空值合并运算符和区间运算符 。
今天主要看的内容是 Swift 中的基本运算符。记录一下.
Nil Coalescing Operator 。
a ?? b 中的 ?? 就是是空值合并运算符,会对 a 进行判断,如果不为 nil 则解包,否则就返回 b .
1
2
3
4
5
6
7
|
var a: String? =
"a"
var b: String? =
"b"
var c = a ?? b
// "a"
a = nil
c = a ?? b
// "b"
b = nil
c = a ?? b ??
"c"
// "c"
|
使用的时候有以下两点要求:
a 必须是 optional 的 b 必须和 a 类型一致 也就是说,a 一定要有被备胎的可能,b 一定要有做备胎的资格.
其实也就是对三目运算符的简写:
。
。
当然你也可以通过自定义运算符来实现:
1
2
3
4
5
6
7
8
9
10
11
12
|
infix operator ||| {}
func |||<T> (left: T?, right: T) -> T {
if
let l = left {
return
l
}
return
right
}
var a:String?
var b =
"b"
var c = a ||| b
|
C# 中也有个 ?? ,感兴趣的可以去了解一下.
Range Operator 。
区间运算符分为闭区间 (...) 和左闭右开区间 (..<) 两种,前者是算头算尾,后者是算头不算尾.
可以应用在 switch 中:
1
2
3
4
5
6
7
8
9
|
switch
aNumber
{
case
0...5:
println(
"This number is between 0 and 5"
)
case
6...10:
println(
"This number is between 6 and 10"
)
default
:
println(
"This number is not between 0 and 10"
)
}
|
区间运算符其实返回的是一个 Range<T> 对象,是一个连续无关联序列索引的集合.
话说以前左闭右开是 .. ,这样和 Ruby 的就刚好完全相反了。。.
不过有人就是想用 .. ,那么可以这样自己写一个:
1
2
3
4
5
6
7
8
9
|
infix operator .. { associativity none precedence 135}
func .. (lhs: Int, rhs: Int) -> Range<Int> {
return
lhs..<rhs
}
for
i in 0..10 {
println(
"index \(i)"
)
}
|
你也可以用 generate() 来遍历:
1
2
3
4
5
6
7
|
var range = 1...4
var generator = range.generate()
// {startIndex 1, endIndex 5}
generator.next()
// 1
generator.next()
// 2
generator.next()
// 3
generator.next()
// 4
generator.next()
// nil
|
.generate() 返回一个 RangeGenerator<T> 的结构体,可以用来遍历 Range<T> 中的值.
以前还有个 (5...1).by(-1) 的用法,不过现在好像没用了.
区间运算符返回的是一个 ClosedInterval 或者 HalfOpenInterval 的东西,类型只要是 Comparable 就可以了。所以我们也可以把 String 放到 ... 里.
比如猫神的 Swifter Tips 中有一章的代码如下,通过 String 的 ClosedInterval 来输出字符串中的小写字母:
1
2
3
4
5
6
7
8
|
let test =
"Hello"
let interval =
"a"
...
"z"
for
c in test {
if
interval.contains(String(c)) {
println(
"\(c)"
)
}
}
|
SubString 。
Ruby 中用点点点来获取 SubString 的方法很方便:
1
2
3
4
5
6
|
2
.
1
.
3
:
001
> a=
"abc"
=>
"abc"
2
.
1
.
3
:
002
> a[
0
]
=>
"a"
2
.
1
.
3
:
003
> a[
0
..
1
]
=>
"ab"
|
而 Swift 中的 ClosedInterval 是没有 subscript 的。但是任性的我们就是要用 [1...3] 这种方法怎么办呢? 自己动手丰衣足食,写个 extension 吧,只需要加个 subscript 就可以了,然后下标的类型是 Range<Int> 就可以了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
extension String {
subscript (r: Range<Int>) -> String {
get {
let startIndex = advance(self.startIndex, r.startIndex)
let endIndex = advance(startIndex, r.endIndex - r.startIndex)
return
self[Range(start: startIndex, end: endIndex)]
}
}
}
var s =
"Hello, playground"
println(s[0...5])
// ==> "Hello,"
println(s[0..<5])
// ==> "Hello"
|
如果要搜索目标字符串之后再截取 substring 可以这样:
1
2
3
4
5
6
7
8
9
10
|
let name =
"Joris Kluivers"
let start = name.startIndex
let end = find(name,
" "
)
if
(end != nil) {
let firstName = name[start..<end!]
}
else
{
// no space found
}
|
以上所述就是本文的全部内容了,希望大家能够喜欢.
最后此篇关于Swift心得笔记之运算符的文章就讲到这里了,如果你想了解更多关于Swift心得笔记之运算符的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
OkHttp的作用 OkHttp is an HTTP client。 如果是HTTP的方式想得到数据,就需要我们在页面上输入网址,如果网址没有问题,就有可能返回对应的String字符串,如果这个地址
Record 一个重要的字符串算法,这是第三次复习。 通过总结我认为之所以某个算法总是忘记,是因为大脑始终没有认可这种算法的逻辑(也就是脑回路)。 本篇主要讲解从KMP的应用场景,
SQL 注入基础 【若本文有问题请指正】 有回显 回显正常 基本步骤 1. 判断注入类型 数字型 or 字符型 数字型【示例】:
标签: #Prompt #LLM 创建时间:2023-04-28 17:05:45 链接: 课程(含JupyterNotebook) , 中文版 讲师: An
Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来是的编程更加简单、灵活和有趣。界面则基于
红日靶机(一)笔记 概述 域渗透靶机,可以练习对域渗透的一些知识,主要还是要熟悉 powershell 语法,powershell 往往比 cmd 的命令行更加强大,而很多渗透开源的脚本都是 po
八大绩效域详细解析 18.1 干系人绩效域 跟干系人所有相关的活动. 一、预期目标 ①与干系人建立高效的工作关系 ②干系人认同项目目标 ③支持项目的干系人提高
18.3 开发方法和生命周期绩效域 跟开发方法,项目交付节奏和生命周期相关的活动和职能. 一、预期目标: ①开发方法与项目可交付物相符合; ②将项目交付与干系人价值紧密
18.7 度量绩效域 度量绩效域涉及评估项目绩效和采取应对措施相关的活动和职能度量是评估项目绩效,并采取适当的应对措施,以保持最佳项目绩效的过程。 一、 预期目标: ①对项目状况
pygraphviz 安装,windows系统: 正确的安装姿势: Prebuilt-Binaries/PyGraphviz at master · CristiFati/Prebuilt-Binar
今天给大家介绍IDEA开发工具如何配置devtools热加载工具。 1、devtools原理介绍 spring-boot-devtools是spring为开发者提供的热加载
一 什么是正则表达式 // 正则表达式(regular expression)是一个描述字符模式的对象; // JS定义RegExp类表示正则表达式; // String和RegExp都定义了使用
目前是2022-04-25 23:48:03,此篇博文分享到互联网上估计是1-2个月后的事了,此时的OpenCV3最新版是3.4.16 这里前提是gcc,g++,cmake都需要安装好。 没安装好的,
一、概述 1、Flink 是什么 Apache Flink is a framework and distributed processing engine for stateful comput
一、window 概述 Flink 通常处理流式、无限数据集的计算引擎,窗口是一种把无限流式数据集切割成有限的数据集进行计算。window窗口在Flink中极其重要。 二、window 类型 w
一、触发器(Trigger) 1.1、案例一 利用global window + trigger 计算单词出现三次统计一次(有点像CountWindow) 某台虚拟机或者mac 终端输入:nc -
一、时间语义 在Flink 中涉及到三个重要时间概念:EventTime、IngestionTime、ProcessingTime。 1.1、EventTime EventTime 表示日志事
一、概述 以wordcount为例,为什么每次输入数据,flink都能统计每个单词的总数呢?我们都没有显示保存每个单词的状态值,但是每来一条数据,都能计算单词的总数。事实上,flink在底层维护了每
一、概述 checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保 证应用流图状
一、standalone 部署模式 1、下载安装包 下载安装包地址 有两种安装包类型: 第一种是带 Hadoop依赖的(整合YARN) 第二种是不带 Hadoop依赖的(Standalone模式)
我是一名优秀的程序员,十分优秀!