相关疑难解决方法(0)

如何将Swift代码导入Objective-C?

我在Swift中编写了一个库,但我无法将其导入到用Objective-C编写的当前项目中.

有没有办法导入它?

#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
Run Code Online (Sandbox Code Playgroud)

import objective-c swift

271
推荐指数
11
解决办法
17万
查看次数

何时在swift代码中使用@objc?

我是swift的新手,我看到一些方法,如:

@objc private func doubleTapGestureRecognized(recognizer: UITapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)

我想知道什么时候使用@objc?我读了一些文档,但是他们说当你希望它在Objective-C中可以调用时,你应该添加@objc标志

但是,这是一个快速的私有函数,@ obj做了什么?

private objective-c selector ios swift

74
推荐指数
5
解决办法
4万
查看次数

从Objective C类调用Swift函数

我有个问题.我有一个旧的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看到调用)

有人能帮帮我吗?

关心所有.

objective-c swift

73
推荐指数
5
解决办法
8万
查看次数

我可以将Swift默认参数值公开给Objective-C吗?

假设我有一些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?如果没有,任何人都可以向我指出任何文件,说明为什么这不可用?

objective-c swift

10
推荐指数
1
解决办法
5792
查看次数

标签 统计

objective-c ×4

swift ×4

import ×1

ios ×1

private ×1

selector ×1