ns prefix 外伝 … copy-on-write #関モバ

45

Upload: tomohiro-kumagai

Post on 16-Apr-2017

2.109 views

Category:

Software


1 download

TRANSCRIPT

Page 1: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 2: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 3: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 4: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 5: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 6: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 7: NS Prefix 外伝 … Copy-On-Write #関モバ

• NSString, String

• NSData, Data

• NSArray, Array<Element>

Page 8: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 9: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 10: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 11: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 12: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 13: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 14: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 15: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 16: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 17: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 18: NS Prefix 外伝 … Copy-On-Write #関モバ

// 要所だけ抜粋 protocol ReferenceConvertible : _ObjectiveCBridgeable {

// 参照型は Objective-C 互換で、コピー可能 associatedtype ReferenceType : NSObject, NSCopying

}

Page 19: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 20: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 21: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 22: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 23: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 24: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 25: NS Prefix 外伝 … Copy-On-Write #関モバ

public struct Data : ReferenceConvertible, _MutablePairBoxing {

// NSData とのブリッジ public typealias ReferenceType = NSData

// 参照をラップ (Boxing) する internal var _wrapped : _SwiftNSData

Page 26: NS Prefix 外伝 … Copy-On-Write #関モバ

internal final class _SwiftNSData { // NSData と NSMutableData とを管理するラッパー var __wrapped : _MutableUnmanagedWrapper< NSData, NSMutableData>

Page 27: NS Prefix 外伝 … Copy-On-Write #関モバ

internal enum _MutableUnmanagedWrapper< ImmutableType, MutableType> {

case Immutable(Unmanaged<ImmutableType>) case Mutable(Unmanaged<MutableType>) }

Page 28: NS Prefix 外伝 … Copy-On-Write #関モバ

public init(bytes: UnsafeRawPointer, count: Int) {

_wrapped = _SwiftNSData(immutableObject: NSData(bytes: bytes, length: count)) }

Page 29: NS Prefix 外伝 … Copy-On-Write #関モバ

public mutating func append(_ other: Data) {

// この関数で mutableCopy の必要性を判断・実施 _applyUnmanagedMutation { $0.append(other) }

}

Page 30: NS Prefix 外伝 … Copy-On-Write #関モバ

public init(capacity: Int) {

if let d = NSMutableData(capacity: capacity) {

_wrapped = _SwiftNSData(mutableObject: d)

} else {

fatalError("Unable to allocate data of the requested capacity") } }

Page 31: NS Prefix 外伝 … Copy-On-Write #関モバ

public func _bridgeToObjectiveC() -> NSData {

// NSData.self は 8 Byte return unsafeBitCast(_wrapped, to: NSData.self) }

Page 32: NS Prefix 外伝 … Copy-On-Write #関モバ

public static func _forceBridgeFromObjectiveC( _ input: NSData, result: inout Data?) {

result = Data(referencing: input) }

public init(referencing reference: NSData) {

_wrapped = _SwiftNSData(immutableObject: reference.copy() as AnyObject) }

Page 33: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 34: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 35: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 36: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 37: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 38: NS Prefix 外伝 … Copy-On-Write #関モバ

public struct Date : ReferenceConvertible {

// NSDate とのブリッジ public typealias ReferenceType = NSDate

// データを TimeInterval (Double) で直接保持 fileprivate var _time : TimeInterval

Page 39: NS Prefix 外伝 … Copy-On-Write #関モバ

public init(timeIntervalSinceReferenceDate ti: TimeInterval) { _time = ti }

Page 40: NS Prefix 外伝 … Copy-On-Write #関モバ

public mutating func addTimeInterval( _ timeInterval: TimeInterval) {

self += timeInterval }

Page 41: NS Prefix 外伝 … Copy-On-Write #関モバ

public func _bridgeToObjectiveC() -> NSDate {

return NSDate(timeIntervalSinceReferenceDate: _time) }

Page 42: NS Prefix 外伝 … Copy-On-Write #関モバ

public static func _conditionallyBridgeFromObjectiveC( _ x: NSDate, result: inout Date?) -> Bool {

result = Date(timeIntervalSinceReferenceDate: x.timeIntervalSinceReferenceDate) return true }

Page 43: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 44: NS Prefix 外伝 … Copy-On-Write #関モバ
Page 45: NS Prefix 外伝 … Copy-On-Write #関モバ