Swift 4.1 - 无法将 [Character] 类型的值转换为 [String]
Posted
技术标签:
【中文标题】Swift 4.1 - 无法将 [Character] 类型的值转换为 [String]【英文标题】:Swift 4.1 - Cannot convert value of type [Character] to [String] 【发布时间】:2018-06-08 06:07:38 【问题描述】:我的代码之前支持 Swift 3.3,现在我使用 Xcode 9.3 将其升级到 Swift 4.1。它在尝试构建我的项目时向我显示以下错误。
这是 JSON 解析的代码
// MARK: Store JSON initializer
convenience init?(withJSON json: JSON)
//json mapping
//This is of type [Character] after mapping
let services = json["services"].arrayValue.flatMap( $0 ).flatMap( $0.1.stringValue ) //Convert response to 1D array and convert it to array if String
这是我试图调用的初始化方法
//Custom init method
init(id: Int, storeNumber: String, title: String, location: Location, type: String, zip: String, parent: Int, city: String, services: [String], state: String, storePhone: [String], pharmacyPhone: [String], pharmacyFax: [String], workingHours: WorkingHoursString)
//field with error
//here self.services is of type [String]
self.services = services
我正在使用 pod 'SwiftyJSON', '3.1.4' 用于 Json 解析。
错误 - 无法将“[字符]”类型的值转换为预期参数 输入“[字符串]”
/* JSON for services is as given
"services":[
[
"Fresh Food"
]
]
*/
print("Services are \(services)")
Services are ["F", "r", "e", "s", "h", " ", "F", "o", "o", "d"]
解决此问题的最简单解决方案是什么?
【问题讨论】:
你的 JSON 是什么样的? 我必须先构建我的代码,才能看到 JSON,因为此代码是维护性的,我们刚刚开始着手处理。但如果我得到它,我肯定会发布 JSON 对象。 您在黄色区域中的错误显示的内容与编译器抛出的错误不同??错误 - 无法将类型“[String]”的值转换为预期的参数类型“[character]”......并且无法将类型“[Character]”的值转换为预期的参数类型“[String]” 简单的解决方案是:[String(services)]。但是,如果您知道 JSON 的正确结构,您就不会陷入这种情况。 请显示您有问题的 json 原始输出。 【参考方案1】:在以下代码中可以观察到相同的行为:
let services: [[String: Any]?] = [
["service1": "service1-name"],
["service2": "service2-name"]
]
let result = services
.flatMap( $0 )
.flatMap( $0.1 as! String )
print(result)
我认为这是由于 Swift 4 中 String
和 Dictionary
的多重变化造成的(例如,String
变成了 Collection
字符)。在上面的代码中,第一个flatMap
将字典合并(展平)到一个字典中,第二个flatMap
将每个值作为String
并将它们展平为Character
的二维Collection
。
我想你想要这样的东西:
let result = services
.compactMap $0 // remove nil dictionaries
.flatMap // take all dictionary values as strings and flatten them to an array
$0.values.map $0.stringValue
print(result)
这一行给出了一个字符串数组,预期的结果
let services = json["services"]
.arrayValue
.flatMap $0.arrayValue
.map $0.stringValue
【讨论】:
我一定会发布 JSON 对象,一旦我得到它 ***.com/questions/27102666/… 这个链接也被用来解决这个问题。以上是关于Swift 4.1 - 无法将 [Character] 类型的值转换为 [String]的主要内容,如果未能解决你的问题,请参考以下文章
SWIFT 4.1 无法使用类型为“(字符串?)”的参数列表调用类型“Double”的初始化程序
无法使用 Swift 在 Xcode 中使用 Parse 1.7.2 和 Facebook SDK 4.1 创建新用户