Swift4 基本数据类型(范围型, Stride型, 数组, 字符串, 哈希表)
创建: 2018/02/28
完成: 2018/03/04
更新: 2018/05/03 给主要标题加上英语, 方便页内搜索
【任务表】TODO
| 范围型(Range)与Stride型 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 与范围运算符相关的型的概要 |
● 有上下限(A..<B, A...B)的叫有界值型 ● 必须采用Comparable(也就是可以比大小) ● 可算类必须采用Collection, 可以一个一个拿出来(for-in) ● 都采用CustomString, 可以直接print输出 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 单侧范围型与范围运算符 |
● 下限范围型可算不可算由T决定 ● 可比较可算的CountablePartialRangeFrom<T>采用了Sequence协议 可以for-in, 由于没有上限, 退出要自己break/return |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 生成范围型实例 |
... // CountableClosedRange<Int> ● 是构造体 ● 用运算符来生成实例,根据自身值型是否可算来确定类型 可算类型生成CountableRange<T>(A..<B), CountableClosedRange<T>(A...B), CountablePartialRangeFrom<T>(A...) 非可算类型生成非可算范围 ● 可算类范围采用Sequence, 非可算不采用 ● 可以用构造函数来生成(无视被指定型的可算非可算, 可算可变为非可算, 非可算不行!) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 范围型的属性与方法 |
● 属性 T: 有界值型
● 方法
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Stride型概要 |
● 范围和幅度构成的构造体 从范围内以幅度来获取值 ● 构造函数 func stride(from: T, through: T, by: T.stride) -> StrideThrough<T> where T: Strideable // 包含终点 例 for x in stride(from: , to: , by: ) {
● 常和for-in一起用 ● stride(from:to:by:) 可取范围不包含终点 stride(from:through:by:) 包含 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Stride型与Strideable协议 |
func stride(from: T, through: T, by: T.stride) -> StrideThrough<T> where T: Strideable Stride生成函数返回的型采用Strideable协议 ● Strideable的主要声明 public protocol Strideable: Comparable {
差的结果不是Self, 如Stride<UInt>的差为Int (因为有负值) 采用该协议的型主要有: 整数(各种Int), Float, Double, 指针(UnsafePointer<T>) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| for-in与Sequence协议 |
采用Sequence或Collection的可用for-in ● Collection继承Sequence ● StrideTo<T>, StrideThrough<T>采用Sequence ● 数组Array构造体, 哈希表Dictionary构造体, 可算双侧范围型CountableRange<T>构造体(A..<B), CountableClosedRange<T>构造体(A...B) String构造体 采用Collection |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 数组(Array) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
数组, 哈希表,字符串, 可算双侧范围型等都是Collection ● 构造体, 值型(只有类的实例与闭包是参照型) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 变更Collection的内容 |
● 两种, 改变自身与返回新值 a.sort() // 改变自身 a.sorted() // 返回新值 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 部分置换 |
a[m...n] = ... ● 元素数不同也行 ● m,n必须是有效值,不能超过范围 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 子数组的型 |
● ArraySlice<T> ● 和原数组的索引一样 ● copy-on-write(所有值型都是) ● 作Array型参数时要型转换Array(subArray) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 数组的构造函数 |
● 类型写法[T], Array[T]. 下面三个一样 var a: [Int] = [, , ] ● 构造函数
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 数组的属性 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 数组的方法 |
主要方法, 不含带闭包的。采用Collection协议(继承Sequence协议) T: 型参数, S: Sequence, C: Collection, Slice: ArraySlice mutating: 改变受体自身
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 数组的比较 |
● ==, != 比较基准: 元素数相等,对应元素相等 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 有可变长度的参数的函数 |
型名后面三个点... func sample(a: Int, b: String...) -> Bool { ... }
● 与C不同, 不用逗号 ● 任意地方都可以设置成长度变化的参数, 但是一个函数里最多只能有一个可变参数 前提: 可变参数的下一个参数带标签(也就是不能带_) func sample(a: Int..., b: Bool) -> Bool { return false }
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 多元数组 |
数组的元素也是数组 ● 一般最多用到三次元 a[m][n] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 字符串(String)与字符(Character) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
数组, 哈希表,字符串, 可算双侧范围型等都是Collection ● 构造体, 值型(只有类的实例与闭包是参照型) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| String的构造函数 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Character型 |
可以容纳Unicode字符(包括ASCII字符)一个 ● 没有独自的literal, 生成时用一个字符的字符串 ● 特殊字符\u{}, 如\u{3085} var sample1: Character = "a" // 用字面量来生成 ● 采用Comparable, 可比较。 函数参数和运算时可指定一个字符的字符串作为字符型 let a: Character = "a" ● 可以print |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Unicode.Scalar型 |
表示Unicode字码, 21比特。 let sample1: Unicode.Scalar = "a" ● Unicode型作为命名空间, 包含字码等型和常数信息 ● 采用Comparable, 可比大小, 可以与一个字符的文字字面量比较 ● 属性 value, 获取字码(UInt32型) ● Character的构造函数可以Unicode.Scalar型实例做参数 ● 可以print |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 合成字符与Character型 |
● Swift的文字都是基于Unicode ● 一个Unicode字符除了单个字码外还有多个字码的组合 let gu: Character = "\u{30B0}" // グ
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 从字符串取出字符 |
● 字符串是Character的Collection, 采用Collection String.Element = Character ● for-in, 取出来的型是Character |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 字符串属性 |
主要属性 Ch: Character, Index: String.Index, C: Collection
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 字符串方法 |
主要方法 String采用Collection协议(更准确说是BodorectionalCollection, RangeReplaceableCollection)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 字符串索引 |
subscript(String.Index) -> Character { get } // 获取指定位置的字符
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Foundation框架的功能 |
● 除了算数运算, 系统功能, 还包含ObjC库 ● GUI应用下自动读取 # TODO: Supply [补充Foundation内Swift.String可用的方法 p156] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 复杂的字符插值 |
● \()插值可以嵌套 ● 内部可以包含式子 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
多行的字符串字面表示方法 literal |
# TODO: Supply [补充该部分 p158] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 作为文字码的Collection来操作字符串 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 哈希表(Hash/Dictionary) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
数组, 哈希表,字符串, 可算双侧范围型等都是Collection ● 构造体, 值型(只有类的实例与闭包是参照型) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 哈希表的型声明与初始值 |
● 所有键必须同型, 所有值必须同型 var sample1 = [ "Swift": , "Objective-C": ] //字面量来生成 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 获取哈希表 |
subscript来获取, h["sample"] var sample = ["":, "":] ● 返回的都是可选型 ● 增加元素 sample[""] = // 新键里放值 ● 删除元素 sample[""] = nil // 要删除的地方的值设为nil ● 当key的值必须采用Hashable协议 各种Int, 实例(带误差, 不用), Bool, String, Character等 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 哈希表的比较 |
用==与!= ● 相等含义: 双方键完全相同, 键所对值完全相同 ● 值必须采用Equatable协议 (Comparable协议采用Equatable协议, 所以采用Comparable协议也行) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 哈希表的属性 |
● 附属型 Key: 键型, Keys: Key的Collection Value:值型, Values: Value的Collection associatedtype Element = (key:Key, value:Value) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 哈希表的方法 |
● 不包括带闭包的 ● Keys(键Collection), Values(值Collection)也可用Sequence, Collection的方法 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 哈希表的索引与搜索的默认值 |
哈希表采用Collection subscript(key: Key) -> Value? // 获取值 ● 不存在时返回nil ● 设定默认值 subscript(key: Key, default:@autoclosure () -> Value)) -> Value 呼出的写法 h[键, default: 默认值] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 哈希表与for-in |
基本循环 for h in hashSample { ... } // 基本写法
通配符循环 for (key, value) in hashSample { ... } // key是键, value是值
键/值单个循环 for key in h.keys { ... } // 只要键的Collection
● 哈希表自身, 键列Keys, 值列Values共用索引 用key去接入哈希表, 值的更换等 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Swift4 基本数据类型(范围型, Stride型, 数组, 字符串, 哈希表)的更多相关文章
- Perl 引用:引用就是指针,Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序。
Perl 引用引用就是指针,Perl 引用是一个标量类型可以指向变量.数组.哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方. 1.创建引用1.使用斜线\定义变量的时候,在变量名前面加个\, ...
- PHP关联数组和哈希表(hash table) 未指定
PHP有数据的一个非常重要的一类,就是关联数组.又称为哈希表(hash table),是一种很好用的数据结构. 在程序中.我们可能会遇到须要消重的问题,举一个最简单的模型: 有一份username列表 ...
- 【LeetCode 1_数组_哈希表】Two Sum
解法一:O(N) vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, i ...
- repeater绑定数组、哈希表、字典 ArrayList/HashTable,Dictionary为datasource
原文发布时间为:2009-11-19 -- 来源于本人的百度文章 [由搬家工具导入] repeater绑定数组、哈希表、字典datasource为ArrayList/HashTable,Diction ...
- python基础知识2——基本的数据类型——整型,长整型,浮点型,字符串
磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 对于Python ...
- oracle 数据类型详解---日期型(转载)
oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享: 注:由于INTER ...
- python基础-基本数据类型总结_整型(int)_字符型(str)_day3
一.基本数据类型 1.整型(int) ps1:数字 int ,所有的功能,都放在int里a1 = 123a1 = 456 ps2: int 将字符串转换为数字 # -int # 将字符串转换为数字 ...
- 2016年11月3日JS脚本简介数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6.布尔型数据:bool 7.对象类型:object 8.二进制:binary 语言类型: 1.强类型语言:c++ c c# java 2.弱类型语
数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6 ...
- Python基础:1.数据类型(空、布尔类型、整型、长整型、浮点型、字符串)
提示:python版本2.7,windows系统 Python提供的基本数据类型:空.布尔类型.整型.长整型.浮点型.字符串.列表.元组.字典.日期 1.空(None) None,是一个特殊的值,不能 ...
随机推荐
- jsp动态页面访问报错:HTTP Status 500 - java.lang.NullPointerException,org.apache.jasper.JasperException: java.lang.NullPointerException
今天把项目导入进去一个新的项目中去结果出现了: org.apache.jasper.JasperException: java.lang.NullPointerException 错误,jsp居然访问 ...
- Spring注解 @Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析
@Repository.@Service.@Controller 这几个是一个类型,其实@Component 跟他们也是一个类型的 Spring 2.5 中除了提供 @Component 注释外,还定 ...
- POJ 2965 The Pilots Brothers' refrigerator【BFS+状压 Or 脑洞】
题目链接: http://poj.org/problem?id=1753 题意: 给定冰箱门的开关情况,改变一个门则其所在行列的门都会发生改变,求出改变门的最少操作使得最终所有门都是打开状态. 代码: ...
- P1396 营救 洛谷
https://www.luogu.org/problem/show?pid=1396 题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起 ...
- Java二维码的解码和编码
原文:http://www.open-open.com/code/view/1430906793866 import java.io.File; import java.util.Hashtable; ...
- 使用Android SwipeRefreshLayout了解Android的嵌套滑动机制
SwipeRefreshLayout 是在Android Support Library, revision 19.1.0加入到support v4库中的一个下拉刷新控件,关于android的下拉刷新 ...
- Office WORD里面打字,后面的字自动被删除怎么办
word或其他编辑器里打字以后其后面的字就被自动删除了-解决方案 2011-09-26 14:52:09| 分类: 电脑维护|字号 订阅 解决方法: 再按一下 Insert键 就OK啦 今天有 ...
- BC一周年B
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> ...
- 解决SVN Cleanup时遇到错误信息:Cleanup failed to process the following paths:xxxxxxx Previous operation has not finished: run 'cleanup' if it was interrupted Please execute the 'Cleanup' command.
解决SVN Cleanup时遇到错误信息:Cleanup failed to process the following paths:xxxxxxx Previous operation has no ...
- HDU 3469 Catching the Thief (博弈 + DP递推)
Catching the Thief Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...