gpt4 book ai didi

objective-c - 使用参数从 Objective-C 调用 Swift func

转载 作者:搜寻专家 更新时间:2023-11-01 06:01:04 24 4
gpt4 key购买 nike

我想将 Swift 类集成到 UIViewController 类中。我想我所做的所有设置都是正确的。我有一个带有函数的类 rURLTask:NSObject:

@objc public func primer() {
print("primer")
}

在我的 .swift 文件中,可以从我的 Objective-C 类调用它:

[URLTask primer];

打印效果很好。另一个功能是:

@objc public func ladeURL(url: URL?) {
print("loadURL")
}

但是这个我不能从 Objective-C 调用。我试着写:

NSURL* testURL = [NSURL URLWithString:@"http://www.google.com"];    
[URLTask ladeURL:testURL];

我得到错误:

No visible @interface for 'rURLTask' declares the selector 'ladeURL:'

我认为有一个非常基本的错误。在另一个项目中使用 Swift 3 中的 Objective-C 效果很好。

最佳答案

不能打电话的原因

@objc public func ladeURL(url: URL?) {
print("loadURL")
}

[URLTask ladeURL:testURL];

ladeURL: 就 Objective-C 而言不是此方法的名称。 这就是编译器说“不可见'rURLTask' 的@interface 声明了选择器 ladeURL:”。

就 Objective-C 而言,它的名称是 ladeURLWithUrl:。那是因为您将 url: 参数名称暴露为外部标签。


如果能够说对你来说很重要

[URLTask ladeURL:testURL];

在 Objective-C 中,您可以这样声明 ladeURL:

@objc public func ladeURL(_ url: URL?) {
print("loadURL")
}

看到下划线了吗?隐藏参数的外部标签。


另一个允许您保留 url: 外部标签的解决方案是将 Objective-C 名称声明为 objc 属性的一部分:

@objc(ladeURL:) public func ladeURL(url: URL?) {
print("loadURL")
}

这对编译器说:“我知道你会喜欢将此方法的名称翻译成 Objective-C,如 ladeURLwithUrl:,但不要这样做;翻译它作为 ladeURL: 代替。”

关于objective-c - 使用参数从 Objective-C 调用 Swift func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50631134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com