我正在为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)
}
}
任何人都可以帮助我。
提前致谢。
答案 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约定是使用开始类型名称 带有小写字母的大写字母和函数名称。