![](/img/trans.png)
[英]Is it possible for Swift to inherit from an lightweight generic Objective-c Class?
[英]Inherit from a Swift class in Objective C
我在 Xcode 7 项目中成功地混合和匹配了 Obj-C 和 Swift。 但是,我似乎无法弄清楚在 Objective C 类中如何从 Swift 类继承(是的,我知道将 Swift 类声明为@objc
以实现可见性)。 在这种情况下,所需的 Swift 超类MySwiftViewController
是UIViewController
的子类。 目前,在 Obj-C 中,我直接从UIViewController
继承,而无法访问我在MySwiftViewController
添加的功能。
这是我的理解:
-- 要将 Obj-C 类声明为继承自某物,该类必须在 .h 文件中的 ':' 之后:
#import <UIKit/UIKit.h>
@interface RootViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@end
-- 要使 Swift 类可见,即#import
ed:
#import "MyProject-Swift.h"
但是,您无法将 Swift 自动生成的桥接头导入 Obj-C .h文件。 您也不能使用@class
向前声明不透明的超类。 那么,这是可能的吗?
不幸的是,不可能在 Objective-C 中对 Swift 类进行子类化。 直接来自文档:
你不能在 Objective-C 中继承 Swift 类。
有关使用 Objective-C 可以访问和不可以访问的内容的更多详细信息,请参阅 Apple 的互操作性指南。
至于 Xcode 8.0 及更早版本,有一个肮脏的解决方案,将来可能会修复。
如果你想从 swift 文件子类化,你可以添加objc_subclassing_restricted
属性。 为方便起见,您可以将其设为宏。 代码:
斯威夫特班。
import Foundation
class SwiftClass : NSObject {
func say() {
print("hi");
}
}
对象类:
#import <Foundation/Foundation.h>
#import "test-Swift.h"
#define SWIFT_SUBCLASS __attribute__((objc_subclassing_restricted))
SWIFT_SUBCLASS
@interface ObjcClass : SwiftClass
- (instancetype)init;
@end
@implementation ObjcClass
- (void)say {
NSLog(@"oops");
}
@end
但是,据我所知,它不受支持,因此您可能会遇到任何类型的错误。 所以它不是行动指南,更像是好奇的事情。
其实可以通过类来实现:
SWIFT代码
import UIKit
@objc open class TestModel: NSObject {
@objc var testName: String = String()
}
目标 C .h 文件代码
#import <Foundation/Foundation.h>
#import "Test-Swift.h"
@interface TestModel (Add)
- (void)configTestName;
@end
Objective C .m 文件代码
#import "TestModel+Add.h"
@implementation TestModel (Add)
- (void)configTestName {
self.testName = @"12323";
}
@end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.