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,是一个特殊的值,不能 ...
随机推荐
- jquery制作图片瀑布流点击按钮加载更多内容
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script> ...
- MongoDB基本管理命令操作
1. 查看所有数据库: show dbs 或: show databases 注意: 该命令不会显示新创建的空数据库,若想显示需要向空数据库插入一些数据. MongoDB中默认的数据库为test,若果 ...
- c++ 高性能日志库(muduo_AsyncLogging)
c++ 高性能日志库(muduo_AsyncLogging) 实现一个高效的网络日志库要解决那些问题? 首先明确一下问题的模型,这是一个典型的多生产者 单消费者问题,对于前端的日志库使用者来说,应该做 ...
- java IO与NIO
场景:IO适用于大而少,NIO适用于小而多 转载:https://www.cnblogs.com/kzfy/p/5063467.html 传统的socket IO中,需要为每个连接创建一个线程,当并发 ...
- Spring Security教程(5)---- 国际化配置及UserCache
这一章是为了给后面的讲解打基础的,主要介绍下国际化的配置及UserCache的配置及使用 国际化配置 <!-- 定义上下文返回的消息的国际化 --> <bean id="m ...
- Deepin-还原Windows平台
首次启动! 是不是感觉很迷茫呢? 找不到存在感 先设置成Windows那种高校模式(右键下面任意区域) OK了吧,然后我们找到“启动器”或者按Windows键(在Deepin linux我们称为Sup ...
- ART虚拟机之Trace原理(转)
一.概述 Android 6.0系统采用的art虚拟机,所有的Java进程都运行在art之上,当应用发生ANR(Application Not Response,其中最终的一个环节便是向目标进程发送信 ...
- java-组合优于继承
组合和继承.都能实现对类的扩展. 差别例如以下表所看到的 组合 继承 has-a关系 is-a关系 执行期决定 编译期决定 不破坏封装,总体和局部松耦合 破坏封装,子类依赖父类 支持扩展,任意添加组合 ...
- 实现@using{}代码块
前几天,我要写个插件,放在asp.net mvc的view上.这需要写一些扩展HtmlHelper功能的方法.这些方法的一个参数是一段javascript代码. 假如这个参数类型是字符型,当然很简单了 ...
- redis缓存数据库的详解
1,什么是redis? Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以 ...