Nadal uczę się integrować kod Swiftdo kodu napisanego w Objective C. Powiedzmy, że jeśli wymienię plik SWIFT i klasę o tej samej nazwie, która została już zajęta przez dowolną klasę Objective-C.
Chciałbym utworzyć: "ViewController.swift", i mieć następujące treści:
import Foundation
import UIKit
@objc class ViewController:UIViewController {
func swiftMethod() {
print("It works.")
}
}
Istnieją już "ViewController.h" i "ViewController.m". A później spróbuję zadzwonić do klasy Swift w Objective-C:
#import <myproject-Swift.h>
...
ViewController *vc = [ViewController new];
[vc swiftMethod];
...
W jaki sposób kompilator będzie wiedział, która klasa zainicjowałem: klasa z Swift lub z Objective-C?
Odpowiedzi:
4 dla odpowiedzi № 1W środowisku wykonawczym Obj-C dwie klasy mają różne nazwy. Nazwę klasy Swift YourProject.ViewController
podczas gdy klasa Obj-C nazywa się po prostu ViewController
.
Z kodu Obj-C, która klasa zostanie uzyskana, zależy od tego, który nagłówek zostanie zaimportowany.
Jeśli importujesz oba nagłówki, oznacza to błąd kompilatora.
Jeśli zmusisz obie klasy do posiadania tej samej nazwy, użyj:
@objc(ViewController) class ViewController: UIViewController {
}
to jest błąd łącznika.