Objective-C调用Swift函数

问题描述 投票:4回答:1

MySwift.swift文件中定义的Swift函数:

func SomeSwift()
{

}

SomeSwift()没有在任何Swift类中定义,它只是一个纯函数。

在CMD + B建立项目后,打开Project-Swift.h,那里没有显示SomeSwift()

是否必须在某些Swift类中定义Swift中的函数?和@objc标记?

如下:

@objc class SomeSwift: NSObject {
   func SomeSwift()
  {

  }
}
ios objective-c swift objective-c-swift-bridge
1个回答
6
投票

参考Apple Documentation关于从Objective-C使用Swift:

Swift类必须是Objective-C类的后代才能在Objective-C中访问和使用

意味着你的班级应该是@objc class SomeSwift: NSObject(你是对的!),但你无法访问Swift文件中的所有内容:

当您创建一个源自Objective-C类的Swift类时,可以从Objective-C自动获得与Objective-C兼容的类及其成员属性,方法,下标和初始化程序。这不包括仅限Swift的功能,例如此处列出的功能:

泛型

元组

在没有Int原始值类型的Swift中定义的枚举

Swift中定义的结构

Swift中定义的顶级函数

Swift中定义的全局变量

在Swift中定义的Typealiases

Swift风格的可变参数

嵌套类型

咖喱功能

Reference

所以,你不能使用SomeSwift顶级功能。

即使你试图在声明之前添加@objc,编译器也会告诉:

enter image description here

@objc只能在类成员,@ objc协议和类的具体扩展时使用。

建议删除@objc

© www.soinside.com 2019 - 2024. All rights reserved.