gpt4 book ai didi

objective-c - 'MySwiftClass' 没有可见的@interface 声明选择器 'addX:andY'

转载 作者:IT王子 更新时间:2023-10-29 05:15:14 24 4
gpt4 key购买 nike

我们正在尝试在 Objective-C 实现中引用 Swift 方法。

swift 类:

import Foundation
@objc class MySwiftClass: NSObject {
override init() {
super.init()
}

func sayHello() -> Void {
print("hello");
}

func addX(x:Int, andY y:Int) -> Int {
return x+y
}
}

Objective-C 实现(Objective-c.m):

#import "ProductModuleName-Swift.h"
MySwiftClass* getData = [[MySwiftClass alloc]init];
[getData sayHello] //works
[getData addX:5 addY:5] //No visible @interface for 'MySwiftClass' declares selector 'addX:addY'

最后一行代码报错如下:

No visible @interface for 'MySwiftClass' declares selector 'addX:addY'

最佳答案

如果您在 Xcode 中命令单击 "ProductModuleName-Swift.h"源文件编辑器,然后您可以看到 Swift 方法是如何映射到 Objective-C 的。

在你的情况下是

@interface MySwiftClass : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (void)sayHello;
- (NSInteger)addXWithX:(NSInteger)x andY:(NSInteger)y;
@end

它被称为

MySwiftClass* getData = [[MySwiftClass alloc]init];
[getData sayHello];
NSInteger result = [getData addXWithX:5 andY:5];

更好的 Swift 3 方法名可能是

func add(x: Int, y:Int) -> Int

因为 x 已经是第一个的参数(外部)名称范围。您还可以将 @objc() 属性添加到 Swift 定义中控制 Objective-C 名称。例如,用

@objc(addX:andY:)
func add(x: Int, y: Int) -> Int {
return x+y
}

它会被 Objective-C 调用为

NSInteger result = [getData addX:5 andY:5];

关于objective-c - 'MySwiftClass' 没有可见的@interface 声明选择器 'addX:andY',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41080100/

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