Cómo exponer funciones rápidas SÓLO a objc

Tengo un marco rápido que estoy utilizando dentro de una aplicación Objective C. Tengo una class de Location que tiene los dos parameters:

 ///Latitude in Decimal Degrees public var lat : Double? ///Longitude in Decimal Degrees public var lon : Double? 

que no son accesibles para el Objetivo C porque son opcionales. Espero mantener una class de solo rápido trabajando aquí, así que mi "solución" fue agregar algunos methods @objc para la class también, pero no quiero que sean accesibles rápidamente.

 ///Objective C Extensions to allow easier Access extension LocationMessage { @objc var getLat : Double { if (lat != nil) { return lat! } return -91; } @objc var getLon : Double { if (lon != nil) { return lon!; } return -181; } } 

Así que aquí está la cuestión:

1) Podría poner esta extensión en el marco, pero ¿hay alguna manera de "esconderse" rápido de poder llamarlo?

2) Creo que podría escribir un file rápido en mi aplicación Objective C, que agrega las extensiones a la class, ¿ese sería el path a seguir?

3) ¿Hay otra manera?

A partir de Swift 3.1, esto es posible utilizando el atributo @available . La documentation oficial sobre los attributes menciona muchas opciones diferentes, pero no deja claro cómo se pueden combinar todas. Sin embargo, esta propuesta de evolución Swift , implementada en 3.1, analiza el hecho de marcar algo tan obsoleto como una cierta versión de Swift:

 @available(swift, obsoleted: 3.1) class Foo { //... } 

En este ejemplo, intentar usar la class Foo en Swift 3.1 o posterior dará un error. Con un pequeño ajuste, podemos hacer esto:

 @available(swift, obsoleted: 1.0) @objc(exampleMethodWithObject:) static func exampleMethod(with object: NSObject) { //... } 

En este ejemplo, intentar usar el método exampleMethodWithObject: en Swift 1.0 o posterior dará un error, mientras que usarlo en Objective-C no lo hará. (Si realmente quiere estar seguro, puede especificar obsoleted: 0.1 . Usar 0.0 o dejar el número de versión no funciona).

Entonces, para su código, esto debería funcionar:

 extension LocationMessage { @available(swift, obsoleted: 1.0) @objc var getLat : Double { if (lat != nil) { return lat! } return -91 } @available(swift, obsoleted: 1.0) @objc var getLon : Double { if (lon != nil) { return lon! } return -181 } }