我在从Objective-C访问Swift Singleton时遇到了一些问题。
@objc class SingletonTest: NSObject {
// swiftSharedInstance is not accessible from ObjC
class var swiftSharedInstance: SingletonTest {
struct Singleton {
static let instance = SingletonTest()
}
return Singleton.instance
}
}
无法访问swiftSharedInstance。
8条答案
按热度按时间iswrvxsc1#
Nicky Goethlis的答案是正确的,但我只是想添加另一种创建单例的方法,称为Swift中的**One line Singleton"**,这是我最近遇到的,它不使用
Struct
:Singleton.swift
某个对象文件.m
0yg35tkg2#
Swift 5及以上
用于
Objective-C
5anewei63#
现在我有以下解决方案。也许我忽略了一些可以让我直接访问“swiftSharedInstance”的东西?
然后在ObjC中,我可以获得sharedInstance类方法(导入xcode生成的swift头绑定后)
omqzjyyz4#
要使
SingletonTest
类的成员可访问(swiftSharedInstance
是此类的成员),请在该类上使用@objcMembers
修饰符,或直接在swiftSharedInstance
上添加@objc
修饰符:或者:
5tmbdcev5#
创建
Bridging header
后,请确保从应用目标在Build Settings
中设置Objective-C Generated Interface Header Name
。如果该值为空,请添加以下值:您需要将
@objc
property wrapper
添加到您的singleton
:然后,在
Objective-C
class
中,导入以下内容:最后,编译完项目后,您将能够在
Objective-C
class
中使用来自Swift
的singleton
:piok6c0g6#
要在Obj-C中使用Swift类,你需要
#import "SingletonTest-Swift.h
生成的头文件或者用@class MySwiftClass
转发声明。另外,类需要继承自Obj-C类,就像你在这里用
NSObject
或标记@objc
来公开它一样。你不需要同时做这两件事,@objc
是在选择要公开的东西时的一个更细粒度的选项。苹果有一些关于所有这些的好文档,你也可以在Obj-C互操作性的主题上看到两个不同的WWDC sessions。
sy5wg1nm7#
不要忘记将
sharedInstance
设置为public
在Objc中使用它
5cg8jx4n8#
2022年10月12日更新
所以你不必在每个函数后面都写objC
雨燕级
C View控件的研究
1.导入:
#import "App-Swift.h"
1.调用方法:
[SwiftHelpingExtentions.instanceShared testingMethod];