摘要:
判断是否为空使用的是Collection协议里isEmpty的判断。 public var isEmpty: Bool { return startIndex == endIndex }startIndex 总是返回 0。 public var startIndex: Int { return 0 }endIndex代码如下: @inlinable public va... 阅读全文
摘要:
init() 函数在 Array 里 public init() { _buffer = _Buffer() }以Buffer 是 _ContiguousArrayBuffer 为例。即初始化了一个_ContiguousArrayBuffer。在_ContiguousArrayBuffer里 /// Create an empty buffer. @inlinable intern... 阅读全文
摘要:
public struct Array: _DestructorSafeContainer { #if _runtime(_ObjC) @usableFromInline internal typealias _Buffer = _ArrayBuffer #else @usableFromInline internal typealias _Buffer = _ContiguousAr... 阅读全文
摘要:
to OC func _bridgeToObjectiveCImpl() -> AnyObject { if _guts.isSmall { return _guts.asSmall.withUTF8 { bufPtr in // TODO(String bridging): worth isASCII check for different encoding? ... 阅读全文
摘要:
以append操作为例 public mutating func append(_ other: String) { if self.isEmpty && !_guts.hasNativeStorage { self = other return } self._guts.append(other._guts) }_StringGuts 做了实际的工作... 阅读全文
摘要:
即以 UTF16 编码的格式来查看字符串。 UTF16View 是一个结构体 @_fixed_layout public struct UTF16View { @usableFromInline internal var _guts: _StringGuts @inlinable internal init(_ guts: _StringGuts) { se... 阅读全文
摘要:
即以 Unicode Scarlar 的方式来查看字符串。 /// let flag = "🇵🇷" /// for v in flag.unicodeScalars { /// print(v.value) /// } /// // 127477 /// // 127479UnicodeScalarView 是一个结构体e... 阅读全文
摘要:
在 String 里,用来索引 Character 的,不是整数,而是StringIndex 内部结构extension String { /// A position of a character or code unit in a string. @_fixed_layout public struct Index { @usableFromInline internal ... 阅读全文
摘要:
Native strings have tail-allocated storage, which begins at an offset of nativeBias from the storage object's address. String literals, which reside in the constant section, are encoded as their start... 阅读全文
摘要:
Shared strings do not have tail-allocated storage, but can provide access upon query to contiguous UTF-8 code units. Lazily-bridged NSStrings capable of providing access to contiguous ASCII/UTF-8 set ... 阅读全文
摘要:
最终都要走到__StringStorage 的 create(realCodeUnitCapacity,countAndFlags) 方法里去。 默认实现是 UTF8 internal static func _fromCodeUnits( _ input: Input, encoding: Encoding.Type, repair: Bool ) -> (String... 阅读全文
摘要:
small string, 只有两个 UInt64 的字,这里面存储了所有的信息。内存布局如下:第二个 UInt64存储了标记位和长度信息,以及部分字符串的值 // Get an integer equivalent to the _StringObject.discriminatedObjectRawBits // computed property. @inlinable @inli... 阅读全文
摘要:
对于普通的字符串,对应的_StringObject 有两个存储属性:_countAndFlagsBits: UInt64_object: Builtin.BridgeObject_countAndFlagsBits存储者字符串的长度和一些标记位。 ┌─────────┬───────┬──────────────────┬─────────────────┬────────┬───────┐│ ... 阅读全文
摘要:
感受一下字符串相关的源文件个数String 概览是一个结构体只有一个变量,类型是 _StringGuts如上所示,String 真正的内容在__StringStorage或者__SharedStringStorage里面。 private static func create( realCodeUnitCapacity: Int, countAndFlags: CountAndFl... 阅读全文