微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为何 String.CharacterView 不是 MutableCollection

作者:Ole Begemann,原文链接,原文日期:2017-02-07
译者:Cwift;校对:walkingway;定稿:CMB

本系列的其他文章
(1)Dictionary and Set
(2)String.CharacterView(本文)

上一篇文章 中,我讨论了为什么 Set 和 Dictionary 不能遵守 MutableCollection 和 RangeReplaceableCollection。今天轮到 String.CharacterView 了。

CharacterView 遵守了 RangeReplaceableCollection,但不能遵守 MutableCollection。这是为什么呢?字符串明显是可变的; 从逻辑来看它应该遵守 MutableCollection 协议。我们需要再次回过头来考虑下协议的语义

MutableCollection 的文档制定了以下要求:

MutableCollection 协议允许更改集合中元素的值,但不允许更改集合本身的长度...
在 MutableCollection 实例的某个下标位置保存的值,之后必须可以在同一位置访问。也就是说,对于可变集合实例 a,索引 i 和值 x,以下代码示例中的两组赋值必须是等价的:

a[i] = x
let y = a[i]
// 必须等同于
a[i] = x
let y = x

替换字符可能使索引失效

用 CharacterView 尝试一下。开始有一个初始字符串 a 和一个指向 “_” 字符的索引 i ,然后用一个表情符号(新值 x)来替换它:

var a = "Grinning face: _".characters
let i = a.index(of: "_")!
// 校验 a[i]
a[i] // → "_"

let x: Character = "
                
                                

原文地址:https://www.jb51.cc/swift/322063.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐