在类型为ClassA的对象上未找到属性'sharedInstance'
我正在创建一个快速框架。在这一个类如下所示。在类型为ClassA的对象上未找到属性'sharedInstance'
import Foundation
@objc public class classA: NSObject {
public override init(){
super.init();
}
/**
Singleton intance is returned.
*/
public class var sharedInstance: classA {
struct Static {
static let instance = popeye();
}
return Static.instance
}
}
现在,当我将此框架添加到Objective C项目并尝试访问“sharedInstance”时出现此错误。
在ClassA类型的对象上找不到属性'sharedInstance'。 修复它用'sharedInstance'替换'sharedInstance'
但即使我尝试使用修复它,这个问题没有解决。
注意:当我将此框架与swift项目集成时,不会发生此问题!
我坚持.. :(
最后我能解决这个问题随着一个小的变化! :)
-
斯威夫特框架代码
@objc类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" }
}
-
Objective C的父项目代码
SingletonTest * aTest = [SingletonTest sharedInstance]; NSLog(@“Singleton says:%@”,[aTest testTheSingleton]);
我试图重现您的问题。首先在Xcode的语法高亮标记在你提到的Objective-C同样的错误,但代码实际上建成并运行良好。
但是,有一个更简洁的方法可以做到这一点。在你的代码中,你使用的是计算类型属性,每次访问时都会对它进行评估!你可以通过引入struct Static
来解决这个问题,可以在classA
本身完成,如下所示:
/**
Singleton intance is returned.
*/
public static var sharedInstance: classA = popeye()
在这里,我们使用的存储类型的属性,这是贯彻落实单身一个推荐的方式,在这里看到: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html 这里是不同类型房地产的一些文档: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html
也许你应该把变量标记为'public'? –
即使我尝试过。没有解决这个问题。 正如我所说,这与当与swift项目集成时工作得很好。 :( –
http://stackoverflow.com/questions/24489075/call-a-swift-singleton-from-objective-c – Sahil