我有一个swift文件“SomeController.swift”就像这样:
import Foundation
func performSomeStuff() {
println("Performing stuff")
}
现在在app委托中,我正在尝试这样做:(请注意,swift桥接标头已导入)
[SomeController performSomeStuff]
但它不起作用。
我也试过这个:
import Foundation
class SomeController:NSObject {
class func performSomeStuff() {
println("Performing stuff")
}
}
但它仍然失败。
正确的方法是什么?
答案 0 :(得分:1)
添加:
@objc
在swift代码中的class关键字之前,它将是:
@objc class SomeStuff: NSObject {
}
还要在要调用的任何函数前添加@obj。
然后在你的app委托中确保使用#import" projectName-Swift.h"
答案 1 :(得分:0)
您是否能够访问objective-c中的“SomeController”类,如果没有,则首先需要添加“$ {ProjectName} -Swift.h文件并在Build设置中添加Swift编译支持:
要访问从Swift到Objective-C的方法,请添加 进口基金会
class SomeStuff:NSObject {
@objc class func performSomeStuff() {
println("Performing stuff")
}
}
在函数名称之前。
在某些情况下,您需要更精细地控制Swift API如何向Objective-C公开。如果您的Swift类不从Objective-C类继承,或者您希望在接口中更改符号的名称(因为它暴露给Objective-C代码),则可以使用@objc属性。
答案 2 :(得分:0)
好的,我明白了。首先,这是正确的方法。就像你们中的一些人说的那样:
在swift文件中,我有这样的话:
class MyController:NSObject{
class func performTask {
// Here my task is running.
}
}
然后在app委托中,我只导入swift头文件。这样做:
[MyController performTask];
现在我错了。这对我来说是一个错误,但也许对那里的其他人有用。
当我第一次创建第一个swift文件时,我将它放在我的Source文件夹中的一个文件夹中。但是当我开始使用多个swift文件时,我将桥接头移到该文件夹之外并进入主Source文件夹(仅用于组织)。
问题是,它没有给我一个直接的错误告诉我是什么问题。我必须检查问题导航器以确定问题。
希望这可以帮助那些人。