|
13 | 13 | @_exported import FoundationInternationalization
|
14 | 14 |
|
15 | 15 | open class NSLocale: NSObject, NSCopying, NSSecureCoding {
|
| 16 | + // Our own data |
16 | 17 | var _locale: Locale
|
17 | 18 |
|
18 | 19 | internal init(locale: Locale) {
|
@@ -398,21 +399,6 @@ extension NSLocale {
|
398 | 399 | }
|
399 | 400 | #endif
|
400 | 401 |
|
401 |
| -extension NSLocale : _SwiftBridgeable { |
402 |
| - typealias SwiftType = Locale |
403 |
| - internal var _swiftObject: Locale { |
404 |
| - return self._locale |
405 |
| - } |
406 |
| -} |
407 |
| - |
408 |
| -extension NSLocale : _StructTypeBridgeable { |
409 |
| - public typealias _StructType = Locale |
410 |
| - |
411 |
| - public func _bridgeToSwift() -> Locale { |
412 |
| - return Locale._unconditionallyBridgeFromObjectiveC(self) |
413 |
| - } |
414 |
| -} |
415 |
| - |
416 | 402 | // MARK: - Deprecated Locale API
|
417 | 403 |
|
418 | 404 | extension Locale {
|
@@ -455,24 +441,71 @@ extension Locale {
|
455 | 441 |
|
456 | 442 | // MARK: - CF Conversions
|
457 | 443 |
|
| 444 | +extension CFLocale : _NSBridgeable, _SwiftBridgeable { |
| 445 | + typealias NSType = NSLocale |
| 446 | + typealias SwiftType = Locale |
| 447 | + internal var _nsObject: NSLocale { |
| 448 | + return NSLocale(localeIdentifier: CFLocaleGetIdentifier(self)._swiftObject) |
| 449 | + } |
| 450 | + internal var _swiftObject: Locale { |
| 451 | + return _nsObject._swiftObject |
| 452 | + } |
| 453 | +} |
| 454 | + |
458 | 455 | extension Locale {
|
| 456 | + typealias CFType = CFLocale |
459 | 457 | internal var _cfObject: CFLocale {
|
460 |
| - CFLocaleCreate(nil, identifier._cfObject) |
| 458 | + return _bridgeToObjectiveC()._cfObject |
461 | 459 | }
|
462 | 460 | }
|
463 | 461 |
|
464 | 462 | extension NSLocale {
|
465 | 463 | internal var _cfObject: CFLocale {
|
466 |
| - CFLocaleCreate(nil, _locale.identifier._cfObject) |
| 464 | + CFLocaleCreate(nil, self.localeIdentifier._cfObject) |
467 | 465 | }
|
468 | 466 | }
|
469 | 467 |
|
470 |
| -extension CFLocale { |
| 468 | +// MARK: - Swift Conversions |
| 469 | + |
| 470 | +extension NSLocale : _SwiftBridgeable { |
| 471 | + typealias SwiftType = Locale |
471 | 472 | internal var _swiftObject: Locale {
|
472 |
| - Locale(identifier: CFLocaleGetIdentifier(self)._swiftObject) |
| 473 | + return Locale(identifier: self.localeIdentifier) |
473 | 474 | }
|
| 475 | +} |
| 476 | + |
| 477 | +extension NSLocale : _StructTypeBridgeable { |
| 478 | + public typealias _StructType = Locale |
474 | 479 |
|
475 |
| - internal var _nsObject: NSLocale { |
476 |
| - NSLocale(locale: _swiftObject) |
| 480 | + public func _bridgeToSwift() -> Locale { |
| 481 | + return Locale._unconditionallyBridgeFromObjectiveC(self) |
| 482 | + } |
| 483 | +} |
| 484 | + |
| 485 | +extension Locale : _ObjectiveCBridgeable { |
| 486 | + public static func _isBridgedToObjectiveC() -> Bool { |
| 487 | + return true |
| 488 | + } |
| 489 | + |
| 490 | + @_semantics("convertToObjectiveC") |
| 491 | + public func _bridgeToObjectiveC() -> NSLocale { |
| 492 | + return NSLocale(locale: Locale.current) |
| 493 | + } |
| 494 | + |
| 495 | + public static func _forceBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) { |
| 496 | + if !_conditionallyBridgeFromObjectiveC(input, result: &result) { |
| 497 | + fatalError("Unable to bridge \(NSLocale.self) to \(self)") |
| 498 | + } |
| 499 | + } |
| 500 | + |
| 501 | + public static func _conditionallyBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) -> Bool { |
| 502 | + result = input._locale |
| 503 | + return true |
| 504 | + } |
| 505 | + |
| 506 | + public static func _unconditionallyBridgeFromObjectiveC(_ source: NSLocale?) -> Locale { |
| 507 | + var result: Locale? = nil |
| 508 | + _forceBridgeFromObjectiveC(source!, result: &result) |
| 509 | + return result! |
477 | 510 | }
|
478 | 511 | }
|
0 commit comments