/ / Swift i Objective-C Klasy o tej samej nazwie - cel-c, szybki

Klasy Swift i Objective-C o tej samej nazwie - cel-c, szybki

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 № 1

W ś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.