Nic*_*als 15 singleton objective-c swift
我在从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
}
}
Run Code Online (Sandbox Code Playgroud)
无法达到swiftSharedInstance.
roh*_*tel 21
Nicky Goethlis的回答是正确的,但我只想添加另一种Singleton创建的方式,称为 One line Singleton"在Swift中,我最近遇到过它并没有使用Struct:
Singleton.swift
@objc class Singleton: NSObject {
static let _singletonInstance = Singleton()
private override init() {
//This prevents others from using the default '()' initializer for this class.
}
// the sharedInstance class method can be reached from ObjC. (From OP's answer.)
class func sharedInstance() -> Singleton {
return Singleton._singletonInstance
}
// Some testing
func testTheSingleton() -> String {
return "Hello World"
}
}
Run Code Online (Sandbox Code Playgroud)
SomeObjCFile.m
Singleton *singleton = [Singleton sharedInstance];
NSString *testing = [singleton testTheSingleton];
NSLog(@"Testing---> %@",testing);
Run Code Online (Sandbox Code Playgroud)
Swift 5 及以上
final class Singleton: NSObject {
@objc static let shared = Singleton()
@objc var string: String = "Hello World"
private override init() {}
}
Run Code Online (Sandbox Code Playgroud)
用于 Objective-C
NSLog("Singleton String = %@", [Singleton shared].string]);
Run Code Online (Sandbox Code Playgroud)
现在我有以下解决方案.也许我忽视了一些能让我直接访问"swiftSharedInstance"的东西?
@objc class SingletonTest: NSObject {
// swiftSharedInstance is not accessible from ObjC
class var swiftSharedInstance: SingletonTest {
struct Singleton {
static let instance = SingletonTest()
}
return Singleton.instance
}
// the sharedInstance class method can be reached from ObjC
class func sharedInstance() -> SingletonTest {
return SingletonTest.swiftSharedInstance
}
// Some testing
func testTheSingleton() -> String {
return "Hello World"
}
}
Run Code Online (Sandbox Code Playgroud)
然后在ObjC中我可以获取sharedInstance类方法(在导入xcode后生成swift头绑定)
SingletonTest *aTest = [SingletonTest sharedInstance];
NSLog(@"Singleton says: %@", [aTest testTheSingleton]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9984 次 |
| 最近记录: |