การสืบทอดจากตัวควบคุมมุมมองฐาน Objective-c จาก Swift

ฉันกำลังพยายามย้ายคลาส UIViewController Objective-C ไปยัง Swift ตัวควบคุมมุมมองนี้สืบทอดมาจาก BaseViewController โดยที่ฉันมีฟังก์ชันทั่วไปที่ฉันต้องการให้มีในตัวควบคุมทั้งหมด ปัญหาที่ฉันมีคือ myproject-Swift.h ที่สร้างขึ้นไม่สามารถค้นหา BaseViewController ของฉันได้

มีวิธีใดบ้างที่จะใช้ UIViewController อย่างรวดเร็วซึ่งสืบทอดมาจาก BaseViewController (คลาสย่อยของ UIViewController) ที่เขียนใน Objective-C มีปัญหาเรื่องการตัดต่อหรือเปล่า?

สามารถทำซ้ำได้ด้วยโค้ดขั้นต่ำนี้:

BaseViewController.h

#import <UIKit/UIKit.h>

@interface BaseViewController : UIViewController 
@end

BaseViewController.m

import "BaseViewController.h"

@implementation BaseViewController
@end

ViewController.swift

import UIKit

class ViewController : BaseViewController {

}

AppDelegate.m

#import "AppDelegate.h"
#import "projectname-Swift.h"   // Replace with your project name

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = vc;
    [self.window makeKeyAndVisible];

    return YES;
}

ชื่อโครงการ-Bridging-Header.h

#import "BaseViewController.h"

person atxe    schedule 20.06.2014    source แหล่งที่มา
comment
ส่วนหัวการเชื่อมต่อ objc ของคุณมีลักษณะอย่างไร   -  person Nate Cook    schedule 20.06.2014
comment
@NateCook อัปเดตแล้ว มันค่อนข้างง่าย   -  person atxe    schedule 20.06.2014
comment
แค่มี Bridging Header ยังไม่เพียงพอ ตั้งค่าอย่างเหมาะสมแล้วหรือยัง? ดู stackoverflow.com/questions/24272184/   -  person Jack    schedule 20.06.2014
comment
@JackWu ฉันคิดอย่างนั้น ส่วนหัวจะรวมอยู่ใน Objective-C Bridging Header   -  person atxe    schedule 20.06.2014
comment
น่าสนใจ. ดูเหมือนว่าคุณจะมีส่วนที่จำเป็นทั้งหมดในรูปแบบและตำแหน่งที่ถูกต้อง ...อาจเป็นคำถามโง่ๆ แต่คุณได้สร้าง/ดำเนินโครงการจริงหรือไม่ นั่นจำเป็นสำหรับส่วนหัว .swift ที่สร้างขึ้น ที่ไหนสักแห่งในวิดีโอ WWDC บูรณาการกับ Objective-C มีการกล่าวถึงการใช้การประกาศส่งต่อ @class แต่ฉันจำข้อมูลเฉพาะไม่ได้ที่ด้านบนของหัวของฉัน ...   -  person mc01    schedule 20.06.2014
comment
ฉันสร้างโปรเจ็กต์แบบมุมมองเดียวด้วยการตั้งค่าเหล่านี้ทั้งหมดและทำงานได้ดี - ฉันยังสามารถประกาศคุณสมบัติใน BaseViewController.h และเข้าถึงได้ในคลาสย่อย อาจเป็นข้อผิดพลาด? คุณลองสร้างโปรเจ็กต์ใหม่ทีละขั้นตอนได้ไหม   -  person Nate Cook    schedule 20.06.2014
comment
@ mc01 ใช่ มันถูกสร้างขึ้น ใช่แล้ว ดูเหมือนว่าจะเกี่ยวข้องกับลำดับวิธีสร้างไฟล์ต้นฉบับแต่ละไฟล์   -  person atxe    schedule 23.06.2014
comment
@NateCook ฉันทำซ้ำขั้นตอนแล้วและมีข้อผิดพลาดเดียวกัน :-(   -  person atxe    schedule 23.06.2014


คำตอบ (2)


ตามที่ระบุไว้ในคำตอบที่ยอมรับใน ฉันจะเพิ่มการอ้างอิงคลาสการส่งต่อที่ใช้ในส่วนหัว -Swift.h ได้อย่างไร

คำแนะนำการทำงานร่วมกัน (การนำเข้า Swift ไปยัง Objective-C):

หากคุณใช้ประเภท Objective-C ของคุณเองในโค้ด Swift ตรวจสอบให้แน่ใจว่าได้นำเข้าส่วนหัว Objective-C สำหรับประเภทเหล่านั้นก่อนที่จะนำเข้าส่วนหัวที่สร้าง Swift ลงในไฟล์ Objective-C .m ที่คุณต้องการเข้าถึงโค้ด Swift

ตัวอย่างนี้ได้รับการแก้ไขโดยการนำเข้า BaseViewController ก่อนการนำเข้า projectname-Swift.h ใน:

AppDelegate.m

#import "AppDelegate.h"
#import "BaseViewController.h"
#import "projectname-Swift.h"   // Replace with your project name
// ...
person atxe    schedule 23.06.2014

ดูเหมือนว่าพวกเขาจะแก้ไขปัญหาแล้ว ขณะนี้ภายใต้ XCode6-Beta6 ปัญหาที่รายงานโดย @atxe จะไม่เกิดขึ้นอีกต่อไป ดังนั้นคุณจึงสามารถม้วนส่วนหัว AppDelegate.m กลับไปที่:

#import "AppDelegate.h"
#import "projectname-Swift.h"   // Replace with your project name
person Mr Spiegel    schedule 20.08.2014