在类型为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项目集成时,不会发生此问题!

我坚持.. :(

+0

也许你应该把变量标记为'public'? –

+0

即使我尝试过。没有解决这个问题。 正如我所说,这与当与swift项目集成时工作得很好。 :( –

+0

http://*.com/questions/24489075/call-a-swift-singleton-from-objective-c – Sahil

最后我能解决这个问题随着一个小的变化! :)

  • 斯威夫特框架代码

    @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