我在Swift中编写了一个库,但我无法将其导入到用Objective-C编写的当前项目中.
有没有办法导入它?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
Run Code Online (Sandbox Code Playgroud) 我是swift的新手,我看到一些方法,如:
@objc private func doubleTapGestureRecognized(recognizer: UITapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)
我想知道什么时候使用@objc?我读了一些文档,但是他们说当你希望它在Objective-C中可以调用时,你应该添加@objc标志
但是,这是一个快速的私有函数,@ obj做了什么?
我有个问题.我有一个旧的Objective C项目,我想调用新的Swift函数和对象,我创建了文件"-Bridging-Header.h"和"-Swift.h"
我很容易将函数从Swift调用到Objective C,但我有一个反向问题.
所以我创建了一个简单的类"System.Swift"
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
Run Code Online (Sandbox Code Playgroud)
现在我已经尝试按照这里的文档和<...> - Swift.h文件内部写了这个
@class System;
@interface System : NSObject
-(void)printSome;
@end
Run Code Online (Sandbox Code Playgroud)
我已经在Objective C Class中导入了它.此时,在我的Objective C Code的Objective C类(当前为UIViewController)中,我尝试调用"printSome"方法:
- (void)viewDidLoad
{
[super viewDidLoad];
System * sis = [[System alloc] init];
[sis printSome];
//any additional setup after loading the view from its nib.
}
Run Code Online (Sandbox Code Playgroud)
现在我有以下错误:
架构i386的未定义符号:"_ OBJC_CLASS _ $ _ System",引用自:"ObjectiveC_Class_That_Call_Swift_Object"中的objc-class-ref .o ld:未找到架构i386 clang的符号:错误:链接器命令失败,退出代码为1(使用-v看到调用)
有人能帮帮我吗?
关心所有.
假设我有一些Swift类,其中包含我想要暴露给Objective-C的方法:
@objc(Worker) class Worker : NSObject {
func performWork(label: String = "Regular Work") {
// Perform work
}
}
Run Code Online (Sandbox Code Playgroud)
我可以用两种方式来称呼它:
Worker().performWork()
Worker().performWork("Swift Development")
Run Code Online (Sandbox Code Playgroud)
但是,当从Objective-C调用时,我没有得到此方法的"默认"版本 - 我必须提供一个标签:
[[[Worker alloc] init] performWork:@"Obj-C Development"];
Run Code Online (Sandbox Code Playgroud)
请参阅AppName-Swift.h下面的标题中的定义:
SWIFT_CLASS_NAMED("Worker")
@interface Worker : NSObject
- (void)performWork:(NSString * __nonnull)label;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
Run Code Online (Sandbox Code Playgroud)
我希望看到一个带有此签名的方法:
- (void)performWork;
Run Code Online (Sandbox Code Playgroud)
我意识到ObjC不支持默认参数值,但我的假设是Swift默认值只是生成额外的Swift函数,而简单的实现调用"真实"函数(即它们是语法糖,隐藏了我们用于的典型实现) OBJ-C).
有没有办法将此默认值公开给Objective-C?如果没有,任何人都可以向我指出任何文件,说明为什么这不可用?