-2

嗨,我在向字典附加值时遇到错误。我正在使用Xcode 7Swift 2错误消息: 无法将类型的值转换[String: String?]为预期的参数类型[String: String!]

宣言:

var arrVoiceLanguages: [Dictionary<String, String!>] = []

以下是我的功能

  for voice in AVSpeechSynthesisVoice.speechVoices() {
        let voiceLanguageCode = (voice as AVSpeechSynthesisVoice).language

        let languageName = NSLocale.currentLocale().displayNameForKey(NSLocaleIdentifier, value: voiceLanguageCode)

        let dictionary = ["languageName": languageName, "languageCode": voiceLanguageCode]

        arrVoiceLanguages.append(dictionary)
    }

任何帮助表示赞赏。

我不知道为什么人们对这个问题投反对票。!

4

2 回答 2

2

也许您的 arrVoiceLanguages 变量声明了 [String:String!] 类型并且 NSLocale.currentLocale().displayNameForKey() 函数的返回类型是 String?。

所以你可以试试这个(我在结尾添加了 ! 来展开值)。

let languageName = NSLocale.currentLocale().displayNameForKey(NSLocaleIdentifier, value: voiceLanguageCode)!
于 2015-10-16T07:02:16.623 回答
1

你的arrVoiceLanguages数组类型应该是:

var arrVoiceLanguages = [[String: String?]]()

或者您需要以languageName这种方式展开:

guard let languageName = NSLocale.currentLocale().displayNameForKey(NSLocaleIdentifier, value: voiceLanguageCode) else {return}

因为NSLocale.currentLocale().displayNameForKey(NSLocaleIdentifier, value: voiceLanguageCode)返回可选字符串。

通过展开languageName,您无需更改arrVoiceLanguages数组的类型。您的代码将是:

var arrVoiceLanguages: [Dictionary<String, String!>] = []

    for voice in AVSpeechSynthesisVoice.speechVoices() {
        let voiceLanguageCode = (voice as AVSpeechSynthesisVoice).language

        guard let languageName = NSLocale.currentLocale().displayNameForKey(NSLocaleIdentifier, value: voiceLanguageCode) else {return}

        let dictionary = ["languageName": languageName, "languageCode": voiceLanguageCode]

        arrVoiceLanguages.append(dictionary)
    }
于 2015-10-16T07:00:16.090 回答