我有个问题.我有一个旧的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看到调用)
有人能帮帮我吗?
关心所有.
目标:使用 SwiftUI(而不是 UIKit)进行 SceneKit 命中测试
问题:当我在 SwiftUI“UIViewRepresentable”上嵌入默认船舶场景时,示例 handleTap 函数不起作用。我得到了他的错误:
“‘#selector’的参数引用了未暴露给 Objective-C 的实例方法‘handleTap’”
如何创建命中测试并将数据传递到另一个 SwiftUI 视图?
import SwiftUI
import SceneKit
var handleTap: (() -> Void)
struct ScenekitView : UIViewRepresentable {
let scene = SCNScene(named: "ship.scn")!
func makeUIView(context: Context) -> SCNView {
// create and add a camera to the scene
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
scene.rootNode.addChildNode(cameraNode)
// place the camera
cameraNode.position = SCNVector3(x: 0, y: 0, z: 15)
// retrieve the ship node
let ship = scene.rootNode.childNode(withName: "ship", recursively: …Run Code Online (Sandbox Code Playgroud) 例如,假设我有一个类似于静态变量pi的类.
let pi: Double = 3.1415926
class MyClass {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如何允许Objective C代码使用静态变量pi?projectName-Swift.h类将具有自动生成的代码(只是一个小例子而不是100%准确).
SWIFT_CLASS("_MyClass")
@interface MyClass : NSObject
- (instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
Run Code Online (Sandbox Code Playgroud)
所以pi没有被添加到projectName-Swift.h中.这是关于我的项目正在发生的一个小例子,也许它应该生成静态变量,我错过了一些东西.任何提示或建议,以解决这个问题或使这项工作,将不胜感激.
我structs在.swift文件中用swift编写了几个简单的文件。这些structs非常简单,几乎只包含字符串:
struct Letter {
struct A {
static let aSome : String = "descASome"
static let aSomeMore : String = "descASomeMore"
}
struct B {
static let bNow : String = "descBNow"
static let bLater : String = "descBLater"
}
...
}
Run Code Online (Sandbox Code Playgroud)
我想在包含Objective-C代码的项目中使用这些结构,因为我正在编写一个跨平台框架。
我读过:ObjectiveC-Apple的Swift互操作性,明确指出ObjectiveC不能使用Swift编写的结构。除其他功能外,不包括:
Swift中定义的结构
解决方案1:
我找到了一个SO解决方案,可以通过使用类来解决此问题:
@objc class Letter : NSObject {
@objc class A : NSObject {
static let aSome : String = "descASome"
static let aSomeMore : String = "descASomeMore"
} …Run Code Online (Sandbox Code Playgroud)