Zoeken…


Objective-C Classes gebruiken in Swift

Als je een bestaande klasse hebt die je wilt gebruiken, voer je stap 2 uit en ga je vervolgens naar stap 5 . (In sommige gevallen moest ik een expliciete #import <Foundation/Foundation.h aan een ouder ObjC-bestand)

Stap 1: Objective-C-implementatie toevoegen - .m

Voeg een .m bestand toe aan uw klas en noem het CustomObject.m

Stap 2: Voeg Bridging Header toe

Wanneer u uw .m bestand toevoegt, wordt u waarschijnlijk getroffen met een prompt die er als volgt uitziet:

voer hier de afbeeldingsbeschrijving in

Klik JA !

Als u de prompt niet zag of per ongeluk uw bridging-header hebt verwijderd, voegt u een nieuw .h bestand toe aan uw project en noemt u het <#YourProjectName#>-Bridging-Header.h

In sommige situaties, met name bij het werken met ObjC-frameworks, voegt u een Objective-C-klasse niet expliciet toe en kan Xcode de linker niet vinden. Maak in dit geval uw .h bestand met de naam zoals hierboven vermeld en zorg er vervolgens voor dat u het pad op de volgende manier in de projectinstellingen van uw doel koppelt:

voer hier de afbeeldingsbeschrijving in

Notitie

Het is best om uw project te koppelen met behulp van de macro $(SRCROOT) zodat het nog steeds werkt als u uw project verplaatst of er met anderen aan werkt via een externe repo. $(SRCROOT) kan worden gezien als de map die uw .xcodeproj-bestand bevat. Het kan er zo uitzien:

$(SRCROOT)/Folder/Folder/<#YourProjectName#>-Bridging-Header.h

Stap 3: Voeg Objective-C Header toe - .h

Voeg nog een .h bestand toe en CustomObject.h naam CustomObject.h

Stap 4: Bouw uw Objective-C-klasse

In CustomObject.h

#import <Foundation/Foundation.h>

@interface CustomObject : NSObject

@property (strong, nonatomic) id someProperty;

- (void) someMethod;

@end

In CustomObject.m

#import "CustomObject.h"

@implementation CustomObject 

- (void) someMethod {
    NSLog(@"SomeMethod Ran");
}

@end

Stap 5: Klasse toevoegen aan Bridging-Header

In YourProject-Bridging-Header.h :

#import "CustomObject.h"

Stap 6: Gebruik uw object

In SomeSwiftFile.swift :

var instanceOfCustomObject: CustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
println(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()

Het is niet nodig om expliciet te importeren, daar is de bridging header voor.

Swift Classes gebruiken in Objective-C

Stap 1: Maak een nieuwe Swift Class

Voeg een .swift bestand toe aan uw project en noem het MySwiftObject.swift

In MySwiftObject.swift :

import Foundation

class MySwiftObject : NSObject {

    var someProperty: AnyObject = "Some Initializer Val"

    init() {}

    func someFunction(someArg:AnyObject) -> String {
        var returnVal = "You sent me \(someArg)"
        return returnVal
    }

}

Stap 2: Importeer Swift-bestanden naar ObjC Class

In SomeRandomClass.m :

#import "<#YourProjectName#>-Swift.h"

Het bestand: <#YourProjectName#>-Swift.h zou al automatisch in uw project moeten worden aangemaakt, zelfs als u het niet kunt zien.

Stap 3: Gebruik je klas

MySwiftObject * myOb = [MySwiftObject new];
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
myOb.someProperty = @"Hello World";
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
NSString * retString = [myOb someFunction:@"Arg"];
NSLog(@"RetString: %@", retString);

Notitie:

1. CodeCompletion gedroeg zich niet zo nauwkeurig als ik zou willen. Op mijn systeem leek het uitvoeren van een snelle build met "cmd + r" Swift te helpen een deel van de Objc-code te vinden en vice versa.

2. Als u een .swift bestand toevoegt aan een ouder project en de foutmelding krijgt: dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib , probeer Xcode volledig opnieuw te starten.

3. Hoewel het oorspronkelijk mogelijk was om pure Swift-klassen in Objective-C te gebruiken met het @objc voorvoegsel, is dit na Swift 2.0 niet langer mogelijk. Zie bewerkingsgeschiedenis voor originele uitleg. Als deze functionaliteit in toekomstige Swift-versies opnieuw wordt ingeschakeld, wordt het antwoord dienovereenkomstig bijgewerkt.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow