在ClassA类型的对象上找不到属性“sharedInstance”

时间:2016-11-11 06:17:04

标签: objective-c swift ios-frameworks

我正在创建一个快速框架。在那一个类是这样的,如下所示。

 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'

但即使我尝试使用Fix it,这个问题也没有解决。

注意:当我将此框架与快速项目集成时,不会发生此问题!

我很生气.. :(

2 个答案:

答案 0 :(得分:0)

我试图重现你的问题。起初,Xcode中的语法高亮显示标记了你提到的Objective-C中的相同错误,但代码实际上已构建并运行良好。

然而,有一种更清洁的方法。在您的代码中,您使用的是计算类型属性,每次访问它时都会对其进行评估!您可以通过介绍struct Static来解决这个问题,您可以在classA本身执行以下操作,如下所示:

/**
 Singleton intance is returned.
 */
public static var sharedInstance: classA = popeye()

这里我们使用了一个存储的type属性,这是一种实现单例的推荐方法,请看这里: 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

答案 1 :(得分:0)

最后我能够通过一个小小的改变来解决这个问题! :)

  • Swift框架代码

    @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"
    }
    

    }

  • 目标C父项目代码

    SingletonTest * aTest = [SingletonTest sharedInstance]; NSLog(@“Singleton说:%@”,[aTest testTheSingleton]);