无法为我的类创建Singleton对象

时间:2017-08-23 06:42:33

标签: swift3

我正在为Text2Speech创建一个类,为此我创建了Singleton对象,在我的项目中的许多地方使用它作为单个对象,但我收到以下错误:

我的代码:

static let sharedInstance = Text2Speech()

static let sharedInstance : Text2Speech = {
    let instance = Text2Speech()
    return instance
}()

我收到错误:

  

不能在属性初始值设定项中使用实例成员'Text2Speech';   属性初始化程序在'self'可用之前运行

我在很多地方为SingleTon对象做了相同的声明但是只有在这个类中我才遇到错误。

我已经检查过this question thread,但在任何解决方案上都没有运气。

该课程中有线或混乱的东西。

编辑:

Text2Speech课程:

class Text2Speech: NSObject, AVSpeechSynthesizerDelegate {
    var delegate: Text2SpeechDelegate?
    var utteranceCount : Int
    var isMale : Bool
    let synth = AVSpeechSynthesizer()
    static let sharedInstance = Text2Speech()

//    static let sharedInstance : Text2Speech = {
//        let instance = Text2Speech()
//        return instance
//    }()

    override init() {
        self.utteranceCount = 0;
        self.isMale = false
        super.init()
        synth.delegate = self
    }

    func Text2Speech(_ text: String){
        utteranceCount += 1
        let myUtterance = AVSpeechUtterance(string: text)
        myUtterance.postUtteranceDelay = 0.005
        myUtterance.rate = 0.5
        myUtterance.pitchMultiplier = 1.0
        if self.isMale{
            myUtterance.voice = AVSpeechSynthesisVoice(language:"en-GB")
        }
        synth.speak(myUtterance)
    }

    func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance) {
        delegate?.Text2SpeechConvertor(synthesizer, didStart: utterance)
    }

    func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
        utteranceCount -= 1
        let seriouslyFinished = utteranceCount==0 ? true:false
        delegate?.Text2SpeechConvertor(synthesizer, didFinish: utterance, seriouslyFinished: seriouslyFinished)
    }
}

任何人都可以帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:2)

问题是你有一个与你的名字相同的功能 类。这是一个最小的自包含示例,展示了 问题:

class Text2Speech {
    static let sharedInstance = Text2Speech()
    // error: cannot use instance member 'Text2Speech' within property initializer; property initializers run before 'self' is available

    func Text2Speech(_ text: String) { }
}

显然,编译器将Text2Speech()作为尝试 调用该函数。重命名函数(例如func text2Speech)可以解决问题。

请注意,Swift约定是使用开始类型名称 带有小写字母的大写字母和函数名称。