如何在框架中使用Swift扩展Objective-C类?
我有一个(OSX)Objective-C框架,我想添加一些Swift扩展,我正在使用Xcode 7ß6来处理这个框架。框架中有一个类(我们称之为“Sample”)在文件“Sample.h”和“Sample.m”中实现。。“Sample.h”包含:如何在框架中使用Swift扩展Objective-C类?,objective-c,frameworks,swift2,Objective C,Frameworks,Swift2,我有一个(OSX)Objective-C框架,我想添加一些Swift扩展,我正在使用Xcode 7ß6来处理这个框架。框架中有一个类(我们称之为“Sample”)在文件“Sample.h”和“Sample.m”中实现。。“Sample.h”包含: #import <Foundation/Foundation.h> @interface Sample : NSObject @property int x; @end #import "Sample.h" @impleme
#import <Foundation/Foundation.h>
@interface Sample : NSObject
@property int x;
@end
#import "Sample.h"
@implementation Sample
- (instancetype) init {
if ((self = [super init]) == nil) return nil;
self.x = 99;
return self;
}
@end
我在框架中添加了“Sample.swift”,其中包含:
import Foundation
extension Sample {
func PrettyPrint () {
print("\(x)")
}
}
这显然是我想在更大的上下文中做的一个简单版本,这里我想使用Swift文件通过添加一个“PrettyPrint”函数来扩展“Sample”
。。框架构建没有错误,但是框架函数“PrettyPrint”对调用应用程序不可见。将应用程序代码调用到框架中,如:
import Foundation
import TestKit
let sample = Sample()
sample.PrettyPrint()
“sample.PrettyPrint()”失败,原因是:类型为“sample”的值没有成员“PrettyPrint”
为什么会失败?和它能正常工作吗?
额外信息:如果我从框架中删除文件“Sample.swift”并将其放在正在调用框架的应用程序中,则“Sample”类将成功扩展,“Sample.PrettyPrint()”将按预期工作(打印“99”)。您是否尝试过将扩展和函数公开
public extension Sample {
public func PrettyPrint () {
print("\(x)")
}
}
在一个类似的例子中,Tie的回答确实帮助了我,但对我来说并不奏效,我必须为该方法添加@objc:
public extension SearchBarWidget {
@objc public func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
self.endEditing(true)
}
}
SearchBarWidget类是
@objc public
签名的。@RamsayConsulting如果这有效,那么你应该将其标记为answerIt有效,只是确保在尝试访问obj c中的swift扩展之前构建你的项目。