我们正在尝试在Objective-C实现中引用swift方法。
Swift 3类:
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-cm):
#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'
如果"ProductModuleName-Swift.h"
在Xcode源文件编辑器中单击命令,则可以看到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];
问题内容: 我开始学习Swift,并且一直在YouTube上观看斯坦福大学的精彩视频讲座。如果您有兴趣或有帮助,可以使用以下链接(尽管不需要了解我的问题): 使用Swift开发iOS 8应用-2。更多Xcode和Swift,MVC 在听完讲座之后,我发现(据我所知)我的代码与视频中的代码相同,但是在我的系统上,我遇到了编译器错误。经过大量的试验和错误,我设法将代码简化为两个示例,其中一个生成错误,
为什么这在《雨燕3》中行不通?它会在运行时崩溃,并表示: “-[MY_APP_NAME.DisplayOtherappSCTRL TAP:]:无法识别的选择器已发送到实例0x17ECEB70”
问题内容: 我刚刚发现了此功能。 使用“ @interface”语法声明接口可让您输入默认值。 对我来说这是新事物。该默认值应该如何使用。 我找不到对此的引用,因为Java 1.5中“ @”添加之前,www充满了Java接口文档(是.5还是.4中的?) 编辑 感谢您的回答(我已经有点接近“注释”了,因为我已经使用了标签):P 我知道我应该在多年前阅读该文件!!! 许多API需要大量样板代码。 对于
问题内容: Xcode更新后,编译器开始在工作代码上引发错误(两个函数都在AppDelegate.swift中)。 有错误: /Users/../AppDelegate.swift:14:11:方法“ application( :didFinishLaunchingWithOptions :)” 提供的Objective-C方法“ application:didFinishLaunchingWit
我有重复的变量声明,我认为它们可以通过for循环来改进,但是我的尝试失败了。 我尝试了数组的for-loop声明器,但我的语法不起作用。 我有一个“工作代码”: 我试图减少它是这样的: 预期结果: 与“工作代码”相同的结果: 当我单击“menu1”div时: 实际错误消息:“意外标记=”“未捕获的TypeError:菜单[0][i].AddEventListener不是函数” 编辑:我发现了一个巨
我已经看过这些帖子: 谷歌云数据流 - 从Pub到镶木地板 谷歌数据流“工作流程失败”无缘无故 它们很有帮助,我最终为发布/订阅消息创建了类似的东西,比如:<code>{“id”:“1”}</code>(仅用于测试): 我只能看到错误“工作流失败”。但仅对于DataflowRunner,对于DirectRunner,我没有问题。这里是“运行”命令: 以下是此作业的日志(前几行是最后出现的): 现在