相关疑难解决方法(0)

从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万
查看次数

SwiftUI:Scenekit 上的 HitTest

目标:使用 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)

scenekit swiftui

11
推荐指数
2
解决办法
1626
查看次数

iOS:Objective C代码如何在Swift中读取静态变量?

例如,假设我有一个类似于静态变量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中.这是关于我的项目正在发生的一个小例子,也许它应该生成静态变量,我错过了一些东西.任何提示或建议,以解决这个问题或使这项工作,将不胜感激.

objective-c ios swift

8
推荐指数
1
解决办法
6814
查看次数

有没有一种方法可以在Objective-C中使用Swift结构而不将其设置为类?

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)

frameworks cross-platform objective-c swift

5
推荐指数
1
解决办法
5699
查看次数