如何在框架中使用 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 签名。