swift - Swift - 类型 '(String, JSON)' 不能符合 'StringProtocol';只有结构/枚举/类类型可以符合协议
问题描述
我正在使用SwiftyJSON。最终我想看看该"date"
值是否等于该值,selectedDate
如果是,则打印该"event"
值。
但我什至还没有走到那一步。我的if
陈述有误。
我收到的错误说Type '(String, JSON)' cannot conform to 'StringProtocol'; only struct/enum/class types can conform to protocols
。
数据.json
[
{
"date": "01.01",
"event": "Mom birthday",
},
]
ViewController.swift
var json:JSON = false
var selectedDate:String = "01.01"
func updateView() {
json.forEach { (key, data) in
if key == "date", data.stringValue == selectedDate {
print("found it!")
} else {
print("no matches")
}
}
}
覆盖 func viewDidLoad() { super.viewDidLoad()
// Get JSON data
if let path = Bundle.main.path(forResource: "Devotions", ofType: "json") {
do {
let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .alwaysMapped)
json = try JSON(data: data)
} catch let error {
print("parse error: \(error.localizedDescription)")
}
} else {
print("Invalid filename/path.")
}
updateView()
}
解决方案
您可以修改相关行,例如:
data.forEach { (key, data) in
if key == "date", data.stringValue == selectedDate {
print("found it!")
}
}
或者你可以直接访问like;
data["date"].stringValue == selectedDate
推荐阅读
- cmake - 在 Windows 上使用 CMake 配置 ITK 时没有 FFTW 选项
- javascript - vanilla js:SetInterval 和进度条
- html - A-frame:从场景实体调用的 html 对象
- spring-boot - 将 Spring Boot Web 应用程序中的 Spring Batch Admin 与另一个 JPA 持久性集成
- android - 如何以编程方式将固定大小设置为 TextView?
- python - Selenium/BeautifulSoup - Python - 循环多个页面
- import - 无法使用 CrawlerProcess 导入模块
- c# - 带有编码文本的自动热键
- python - 错误检查/处理 Web API 调用中的缺失值
- r - 在R中编写一个函数以按时间迭代地子集数据帧