Avatar
omochimetaru 7/12/2017 5:10 AM
swift-corelibs-foundation - The Foundation Project, providing core utilities, internationalization, and OS independence
5:13 AM
URLがファイルじゃなかったらData読んできて2バイトだけみて UTF16 BOM検出して、 CFStringの関数で初期化して、 最後に self.init(factory: _unsafeReferenceCast(cf, to: NSString.self)) で、 CFのオブジェクトで差し替え
5:14 AM
CFStringを _unsafeReferenceCast とやらで無理やりキャストしつつ、selfを差し替えるから
5:14 AM
Toll-Free Bridgeがここで仕込まれる
5:14 AM
よくうごくなあ・・・
5:19 AM
swift-corelibs-foundation - The Foundation Project, providing core utilities, internationalization, and OS independence
5:19 AM
そのパッチを当てる前の実装は謎だ guard let enc = enc, let cf = CFStringCreateWithBytes(kCFAllocatorDefault, bytePtr, readResult.length, CFStringConvertNSStringEncodingToEncoding(enc.pointee), true) else { throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileReadInapplicableStringEncoding.rawValue, userInfo: [ "NSDebugDescription" : "Unable to create a string using the specified encoding." ]) } var str: String? if String._conditionallyBridgeFromObjectiveC(cf._nsObject, result: &str) { self.init(str!) } else { (edited)
5:20 AM
cfのオブジェクトを作ったあと、_conditionallyBridgeFromObjectiveCで CFStringを Swift.String にキャスト?して
5:20 AM
self.init(String) に渡してる