Avatar
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *) public func components<T : StringProtocol>(separatedBy separator: T) -> [String] { #if FOUNDATION_FRAMEWORK if _foundation_essentials_feature_enabled() { if let contiguousSubstring = _asContiguousUTF8Substring(from: startIndex..<endIndex) { let options: String.CompareOptions if separator == "\n" { // 106365366: Some clients intend to separate strings whose line separator is "\r\n" with "\n". // Maintain compability with `.literal` so that "\n" can match that in "\r\n" on the unicode scalar level. options = [.literal] } else { options = [] } do { return try contiguousSubstring._components(separatedBy: Substring(separator), options: options) } catch { // Otherwise, inputs were unsupported - fallthrough to NSString implementation for compatibility } } } return _ns.components(separatedBy: separator._ephemeralString) #else do { return try Substring(self)._components(separatedBy: Substring(separator), options: []) } catch { return [String(self)] } #endif }
12:07 AM
旧Foundationがある場合/ない場合のコンパイル時分岐があって、 ある場合に、swift-foundationを使うかどうかの実行時分岐があるようだ
12:08 AM
でも 「ない場合」と、「ある場合で使う場合」の実装が違うのはどういうことだ。
12:09 AM
FOUNDATION_FRAMEWORK は、旧があるかどうかじゃなくて、旧版と互換モードってことか・・・?
12:12 AM
A JSONMap is created by a JSON scanner to describe the values found in a JSON payload, including their size, location, and contents, without copying any of the non-structural data. It is used by the JSONDecoder, which will fully parse only those values that are required to decode the requested Decodable types.
12:12 AM
中間データ構造のJSONオブジェクトを作らないっぽいな
12:15 AM
12:16 AM
JSONの構造だけ先にパースして、その構造を高速に巡回するためのオフセットテーブルだけを作るっぽい
12:16 AM
実際の値のデコードは Decodable が要求する時にやる
12:18 AM
なるほどなあ こうやればよかったのか