Swift 3.2/4.0 / XCode 9.1
Vous vous définissez swift3.2 dans les paramètres de projet ( //:configuration = Debug
SWIFT_VERSION = 3.2 )
vous pouvez utiliser votre code(en utilisant le bon fichier d'importation en objc, voir ci-dessous).
Si Vous définissez projet swift 4.0 ( //:configuration = Debug
SWIFT_VERSION = 4.0 )
Vous devez préfixer @objc pour chaque propriété.
Donc:
Swift 3.2:
// MyClass.swift
@objc class MyClass: NSObject{
var s1: String?
@objc var s2 : String?
}
//
// ViewController.m
import "MixingObjCAndSwift-Swift.h"
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
MyClass * mc = [MyClass new];
NSString * s1 = mc.s1;
NSString * s2 = mc.s2;
}
des œuvres.
Swift 4.0:
// MyClass.swift
@objc class MyClass: NSObject{
var s1: String?
@objc var s2 : String?
}
.....
- (void)viewDidLoad {
[super viewDidLoad];
MyClass * mc = [MyClass new];
NSString * s1 = mc.s1;
NSString * s2 = mc.s2;
}
ne fonctionne PAS: compilateur échoue:
/Utilisateurs....ViewController.m:24:21: Propriété 's1' ne trouve pas sur l'objet de type " Maclasse *'
s1 n'est pas précédé de @objc.
Vous devez écrire:
@objc class MyClass: NSObject{
@objc var s1: String?
@objc var s2 : String?
}
(Une-remarque: en C/C++/ObJC fichier, mettez toujours le système/général *h fichiers avant "local" de la classe en-têtes.)
Swift 4
juste ajouter @objcMembers avant la classe
@objcMembers classe MyClassObject: NSObject
{
var s1: Chaîne!
var s2: Chaîne!
}
Swift évolutionentrez description du lien ici