如何从具有隐藏变量名称(参数前的_)或内部+外部(例如 foo(with bar:))的 Objective-C 调用 Swift 函数
Posted
技术标签:
【中文标题】如何从具有隐藏变量名称(参数前的_)或内部+外部(例如 foo(with bar:))的 Objective-C 调用 Swift 函数【英文标题】:How do I call a Swift function from Objective-C that has a hidden variable name (_ before parameter) or an internal + external (e.g. foo(with bar:)) 【发布时间】:2021-02-26 18:00:07 【问题描述】:我正在尝试在我的 Objective-C 模块中使用 Swift 代码并且已经:
导入然而,我仍在努力在 Objective-C 中使用隐藏变量名(带下划线)或同时使用内部和外部变量名的 Swift 函数。如何在 Objective-C 中调用以下函数?
Swift 代码:
@objc
public final class FeedUpdateAttachmentHelper : NSObject
@objc
func myFunction(_ postMetadata: PostMetadata)
...
@objc
func secondFunction(for postMetadata: PostMetadata)
...
我如何尝试在 Objective-C 中调用它们:
[myFunction postMetadata:postMetadata];
[secondFunction forPostMetadata:postMetadata];
两者都给我以下错误:
没有已知的选择器类方法,“function/secondFunction”
【问题讨论】:
【参考方案1】:您始终可以通过 CMD+CTRL 单击#import YourModuleName-Swift.h
来查看您的 Swift 类的 Objective-C 界面。
在这种情况下,它看起来像:
@interface FeedUpdateAttachmentHelper : NSObject
- (void)myFunction:(PostMetadata * _Nonnull)postMetadata;
- (void)secondFunctionFor:(PostMetadata * _Nonnull)postMetadata;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
并且会这样使用:
-(void)doThing
FeedUpdateAttachmentHelper *helper = [[FeedUpdateAttachmentHelper alloc] init];
PostMetadata *metadata = [[PostMetadata alloc] init];
[helper myFunction:metadata];
[helper secondFunctionFor:metadata];
【讨论】:
以上是关于如何从具有隐藏变量名称(参数前的_)或内部+外部(例如 foo(with bar:))的 Objective-C 调用 Swift 函数的主要内容,如果未能解决你的问题,请参考以下文章