如何在框架中使用 Swift 扩展 Objective-C class?
How to extend an Objective-C class with Swift in a framework?
我有一个 (OS X) Objective-C 框架,我想在其中添加一些 Swift 扩展,我正在使用 Xcode 7ß6 来处理这个.在文件 "Sample.h" 和 "Sample.m" 中实现的框架中有 class(我们称之为 "Sample").. "Sample.h" 包含:
#import <Foundation/Foundation.h>
@interface Sample : NSObject
@property int x;
@end
.. 和 "Sample.m" 包含:
#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" class 会成功扩展并且 "sample.PrettyPrint()" 按预期工作(打印“99”)。
您是否尝试过制作扩展和函数 public?
public extension Sample {
public func PrettyPrint () {
print("\(x)")
}
}
在类似的情况下,Tie 的回答确实帮助了我,但对我不起作用,我不得不为方法添加@objc:
public extension SearchBarWidget {
@objc public func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
self.endEditing(true)
}
}
SearchBarWidget class 已 @objc public
签名。
我有一个 (OS X) Objective-C 框架,我想在其中添加一些 Swift 扩展,我正在使用 Xcode 7ß6 来处理这个.在文件 "Sample.h" 和 "Sample.m" 中实现的框架中有 class(我们称之为 "Sample").. "Sample.h" 包含:
#import <Foundation/Foundation.h>
@interface Sample : NSObject
@property int x;
@end
.. 和 "Sample.m" 包含:
#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" class 会成功扩展并且 "sample.PrettyPrint()" 按预期工作(打印“99”)。
您是否尝试过制作扩展和函数 public?
public extension Sample {
public func PrettyPrint () {
print("\(x)")
}
}
在类似的情况下,Tie 的回答确实帮助了我,但对我不起作用,我不得不为方法添加@objc:
public extension SearchBarWidget {
@objc public func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
self.endEditing(true)
}
}
SearchBarWidget class 已 @objc public
签名。