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,是一个特殊的值,不能 ...
随机推荐
- WordPress升级错误:class-wp-filesystem-direct.php on line 122
错误描述:WordPress在后台进行版本升级时,出错,之后进入前台或者后台,都无法访问进入,错误信息如下:Warning: copy(/home/xxx/public_html/wordpress/ ...
- Kibana 可视化监控报警插件 KAAE 的介绍与使用
https://blog.csdn.net/phachon/article/details/53424631 https://blog.csdn.net/Dragon714/article/detai ...
- GOF 23种设计模式目录
经典的gof 23种设计模式,目录大纲查看. 1. Singleton(单例模式) 保证一个类只有一个实例,并提供访问它的全局访问点. 2. Abstract Factory(抽象工厂模式) 提供一个 ...
- NOIP2017 酱油记
Day0: 怀着激动无比的小心情,坐上了学校的校车. 然后司机在某个小县城迷路了,迷路了两个多小时.... 来到酒店,去吃了几把鸡,没见到鸡屁股... 洗了个澡早早睡了.. Day1: 一早被闹铃叫醒 ...
- spring mvc技术
spring mvc之访问路径 1. @RequestMapping这个注解 在实际项 ...
- 蓦然回首,Java 已经 24 岁了!
01.蓦然 真没想到,Java 竟然 24 岁了(算是 90 后)! 提起 Java,印象最深刻的当然就是: class Cmower { public static void main(Strin ...
- Samba简单配置--匿名用户共享资料可读可写的实现
http://e-mailwu.blog.163.com/blog/static/65104036200931893921923/ http://www.cnblogs.com/god_like_do ...
- linux用户列表
centos上面不知道添加了多少个账户,今天想清理一下,但是以前还未查看过linux用户列表, 一般情况下是 cat /etc/passwd 可以查看所有用户的列表 w 可以查看当前活跃的用户列表 c ...
- [Angular] Modify User Provided UI with Angular Content Directives
If we’re going to make our toggle accessible, we’ll need to apply certain aria attributes to the con ...
- 基于空间直方图meanshift跟踪
近期看了一篇文章<spatiograms versus histograms for region-based tracking>,在此把这篇文章的核心思想及算法推理进行整理. 空间直方图 ...