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,是一个特殊的值,不能 ...
随机推荐
- poj3259,简单判断有无负环,spfa
英语能力差!百度的题意才读懂!就是一个判断有无负环的题.SPFA即可.,注意重边情况!! #include<iostream> //判断有无负环,spfa #include<queu ...
- POJ 2513 【字典树】【欧拉回路】
题意: 有很多棒子,两端有颜色,告诉你两端的颜色,让你把这些棒子拼接起来要求相邻的接点的两个颜色是一样的. 问能否拼接成功. 思路: 将颜色看作节点,将棒子看作边,寻找欧拉通路. 保证图的连通性的时候 ...
- hdu6109(并查集+set/倍增)
题目 http://acm.hdu.edu.cn/showproblem.php?pid=6109 分析 对于相同的条件,明显直接并查集 对于不同的条件,可以用set来保存,并查集合并的时候也要对se ...
- ABP每次生成前都执行bundle设置
ABP项目每次编译mvc项目时都会执行bundle,比较耗时. 可以在项目文件(*.csproj)中发现设置了每前生成前执行的命令 <Target Name="PreBuild&quo ...
- DELPHI7调用BERLIN中间件的中文字段名乱码的解决办法
MSSQL数据库的表使用中文字段名,BERLIN开发的DATASNAP中间件,DELPHI7调用中间件的查询方法返回数据给CLIENTDATASET.DATA,发现中文字段名乱码,中文字段名的值可以正 ...
- Weblogic性能优化(图解)
分类:Weblogic (2034) (1) 若是觉得对您有一丢丢的帮助,烦请顶一下哦,激励我码出更多的帖子,^_^谢谢! 1.数据源性能优化 1.1连接池参数配置 登录weblogic控制台,占击“ ...
- 从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection
前言 在阅读这篇文章:Announcing Net Core 3 Preview3的时候,我看到了这样一个特性: Docker and cgroup memory Limits We conclude ...
- 【转载】同步和互斥的POSIX支持(互斥锁,条件变量,自旋锁)
上篇文章也蛮好,线程同步之条件变量与互斥锁的结合: http://www.cnblogs.com/charlesblc/p/6143397.html 现在有这篇文章: http://blog.cs ...
- Linux-百度云之AccleriderMini使用
打开命令行,然后输入: sudo apt-get install mono-devel 最后安装完成时,运行: 示例:mono xx.exe 实例:mono accleridaMini.exe 最后成 ...
- Android之——AIDL深入
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47071927 在上一篇博文<Android之--AIDL小结>中,我们 ...