Mam framework (OS X) Objective-C, do którego chcę dodać niektóre rozszerzenia Swift i używam Xcode 7ß6 do pracy z tym. Istnieje klasa w ramach (nazwijmy go „Sample”) wdrożone w plikach „Sample.h” i „Sample.m” .. „Sample.h” zawiera:Jak rozszerzyć klasę Objective-C o Swift w framework?
#import <Foundation/Foundation.h>
@interface Sample : NSObject
@property int x;
@end
.. a „Sample .m”zawiera:
#import "Sample.h"
@implementation Sample
- (instancetype) init {
if ((self = [super init]) == nil) return nil;
self.x = 99;
return self;
}
@end
dodałem«Sample.swift»do ram zawierającego:
import Foundation
extension Sample {
func PrettyPrint() {
print("\(x)")
}
}
jest to oczywiście trywialny wersja tego, co chcę robić w szerszym kontekście, tutaj Chcę użyć pliku Swift, aby rozszerzyć "Sample" o dodatek g Funkcja "PrettyPrint".
.. framework kompiluje się bezbłędnie, ale funkcja struktury "PrettyPrint" nie jest widoczna dla aplikacji wywołującej. Kod aplikacji poddawania w ramach takich jak:
import Foundation
import TestKit
let sample = Sample()
sample.PrettyPrint()
nie na „sample.PrettyPrint()” z: Wartość typu „próbka” ma człon „prettyprint”
Dlaczego to niepowodzeniem? i Czy to może działać?
Dodatkowe informacje: Jeśli usunę plik "Sample.swift" z frameworka i umieści go aplikację, która wywołuje strukturę, klasa "Sample" zostanie pomyślnie rozszerzona i "sample.PrettyPrint()" działa zgodnie z oczekiwaniami (druk "99").
@RamsayConsulting jeśli to zadziałało, powinieneś oznaczyć to jako odpowiedź – norepro
To nie działa w Swift 3.0 Xcode 8.0 beta –
To działa, po prostu upewnij się, aby zbudować swój projekt przed próbą uzyskania dostępu do szybkiego rozszerzenia w obj c. – Zeezer