1
babyname 2015-06-25 09:07:33 +08:00
这么反人类?
|
2
onevcat 2015-06-25 09:15:02 +08:00
可以去看看今年的 Session 408 以及标准库里 String 的实现方式你就会知道为什么要这么做了。尽量不要用传统 OO 的思维来看 Swift,这样会写得舒心一些。
|
3
pheyer 2015-06-25 09:15:19 +08:00
奇怪为什么不用length呢
|
4
BuilderQiu 2015-06-25 09:17:29 +08:00
有点诡异
反人类+1 |
5
forkon 2015-06-25 09:20:18 +08:00
swift变得强大的同时确实把一些东西整复杂了,当然更多的是简便
|
6
PrideChung 2015-06-25 09:25:37 +08:00
字符串切片的操作的确是很让人犯晕,在Ruby,Python里面都是很简单直观的写法,到Swift里面我是写一次忘一次
|
7
lilydjwg 2015-06-25 10:26:31 +08:00
Rust 里取字符数也是类似的,s.chars().count()。取(UTF-8)字节数是 s.bytes().count()。还有个 s.graphemes().count() 可以用,它是数 grapheme cluster 数的,比如 ç 是两个字符,却是一个 grapheme cluster(然后还有 ç 是一个字符)。人类的文字很复杂的,Unicode 的某些设计使之更复杂了……
|
9
otakustay 2015-06-25 11:03:55 +08:00
看上去很像是ObjC继承过来的理念,让代码本身的可读性接近自然语言,是一种OO与其它编程模式的混合体
|
10
chmlai 2015-06-25 11:12:57 +08:00 1
因为 Unicode, 早超过16位了, NSString.length 返回的长度也是不可靠的, 算得是内部 UTF-16 码元的数量, 不是字符数.
|
11
ibremn 2015-06-25 12:21:06 +08:00 1
最初的 FoundationKit 是随着 Unicode 标准一起诞生的,那时 Unicode 只有16位。后来 Unicode 扩展了,但 FoundationKit 的设计仍旧被保留下来了,所以 NSString.length 取到的东西,实际上是 UTF-16 码元数量,并非实际 charactor 数量,由此也带来了大量的令人困惑的 API 和很多错误的用法。看一下这个文章吧: http://objccn.io/issue-9-1/
新语言了,厘清一下这些概念也许会好些。我觉得以后应该也会有一些更简单些的写法,但应该不会再和 NSString 一样了。。 |