【问题标题】:What is the proper syntax for accessing a function from ObjC to a Swift Package?从 ObjC 访问函数到 Swift 包的正确语法是什么?
【发布时间】:2021-09-23 19:12:08
【问题描述】:

简单场景:我想在 Objective-C 中调用任何 Swift Package 成员函数。

我正在构建一个参考/演示/概念验证应用程序来混合 ObjC 和 Swift。

这是一个 工作 Swift 端的 sn-p:

import Foundation
import RicPackage

final class Greetings: NSObject {
    @objc public static let shared = Greetings()
    private override init() {}
    
    @objc public func doSomething(name: String) {
        print("Do something, \(name)")
        let ricClass = RicClass()
        ricClass.sayHello()
    }
    
    @objc public func hello() {
        print("Hello Everybody!")
    }
}

这是 Objective-C 的一面:

#import "ViewController.h"
#import "ObjcSwiftHeader-Swift.h"

@class RicClass;

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"Inside VC ViewDidLoad.");
    Greetings *greetings = [Greetings shared];
    [greetings hello];
    [greetings doSomethingWithName: @"Ric"];
    
    RicClass *ricClass = [RicClass alloc];
}


@end

我得到了这个编译器错误:

这是项目的快照:

这里是 Swift 包的东西:

import Foundation

public struct RicStruct {
    public private(set) var text = "Hello, World!"

    public init() {
    }
    
    public func sayHello() -> String {
        "Hello Ric!"
    }
}

public class RicClass: NSObject {
    @objc public var msg = "Mother has a feeling, I might be too appealing."
    @objc public let text = "Hello Everybody!"
    
    public override init() {}
  
    public func sayHello() {
            print(text)
        }
    
    public func doSomething() {
        print("Inside doSomething()")
    }
}

必须有一个简单的解决方案....

【问题讨论】:

  • 我无法使用它来访问导入的 Swift 包和成员 .swift 文件。
  • 我更改了每个苹果文档的代码并得到了编译器错误(上图)。
  • 前向引用应该在标题中。在实现文件中,您需要使用定义(即 Swift 标头)进行导入。另外,在 Obj-C 中创建实例的语法是 [[myClass alloc] init]
  • 我知道'init'。我只关注错误。 'init' 无关紧要。我已经导入了 swift 标头。

标签: swift objective-c swift-package


【解决方案1】:

包作为动态嵌入式框架链接到您的应用中,要使用它们,您应该将包的库导入源文件:

斯威夫特:

import RicPackage

目标-C:

@import RicPackage;

【讨论】:

  • 如此简单优雅。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多