- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 SWXMLHash并在 NSDate
上为 XMLElementDeserializable 编写了一个
扩展
。
我在 this file 的末尾了解了基本类型是如何扩展的.
我看到的是这样的:
import Foundation
import SWXMLHash
struct BlogPost: XMLIndexerDeserializable {
let date: NSDate
static func deserialize(blogPost: XMLIndexer) throws -> BlogPost {
return try BlogPost(
date: blogPost["date"].value()
)
}
}
extension NSDate: XMLElementDeserializable {
/**
Attempts to deserialize XML element content to an NSDate
- element: the XMLElement to be deserialized
- throws: an XMLDeserializationError.TypeConversionFailed if the element cannot be deserialized
- returns: the deserialized NSDate value formatted as "EEE, dd MMM yyyy HH:mm:ss zzz"
*/
public static func deserialize(element: XMLElement) throws -> NSDate {
guard let dateAsString = element.text else {
throw XMLDeserializationError.NodeHasNoValue
}
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz"
let date = dateFormatter.dateFromString(dateAsString)
guard let validDate = date else {
throw XMLDeserializationError.TypeConversionFailed(type: "Date", element: element)
}
return validDate
}
}
Method 'deserialize' in non-final class 'NSDate' must return 'Self' to conform to protocol 'XMLElementDeserializable'
我环顾了 S.O.对于同一错误的其他答案,我没有从他们那里收集到太多信息。
如有任何建议,我们将不胜感激。谢谢!
最佳答案
好吧,这很奇怪,但问题是存在的,因为 NSDate
是一个 class
而不是 struct
。显然需要做一些工作才能使类符合返回 self 的协议(protocol) - 使它与结构一起工作要容易得多!
(在 Swift 4 中,这是不必要的,因为 Date
是一个结构)
我必须添加一些额外的文档来展示它是如何工作的。
检查以下代码(根据您的示例修改)以查看它是否适合您:
import Foundation
import SWXMLHash
extension NSDate: XMLElementDeserializable {
// NOTE: for SWXMLHash 3.0 with Swift 3.0, this will be (_ element: XMLElement)
public static func deserialize(element: XMLElement) throws -> Self {
guard let dateAsString = element.text else {
throw XMLDeserializationError.NodeHasNoValue
}
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz"
let date = dateFormatter.dateFromString(dateAsString)
guard let validDate = date else {
throw XMLDeserializationError.TypeConversionFailed(type: "Date", element: element)
}
// NOTE THIS
return value(validDate)
}
// AND THIS
private static func value<T>(date: NSDate) -> T {
return date as! T
}
}
let xml = "<root><elem>Monday, 23 January 2016 12:01:12 111</elem></root>"
let parser = SWXMLHash.parse(xml)
let dt: NSDate = try! parser["root"]["elem"].value()
另见 Return instancetype in Swift和 Using 'self' in class extension functions in Swift .
注意:添加了注释,指出这对于 SWXMLHash 3.0 看起来会略有不同。
关于ios - 如何使用 SWXMLHash 反序列化 NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38174669/
我正在使用 Vapor 构建应用程序。我的网站在本地主机上运行良好,但在 Heroku 上无法正常运行。我有一个包含来自 xml 的元素的列表。 Xml 是由 SWXMLHash 解析的。 Herok
我有一个问题,希望能尽快解决。我正在使用 SWXMLHash for Swift 解析 eBay 的 API 返回的 XML。有些返回结果非常冗长。 如: xml["findCompletedIte
我是 Swift 新手,正在使用网络请求编写我的第一个应用程序。出于测试目的,我使用 Alamofire 和 SWXMLHash 框架创建了一个应用程序,用于解析请求中的 xml 数据。 总的来说,它
我有以下 XML 结构(这是一个精简的示例): Some value ... MD Massive Dynamic 使用以下模型
我尝试使用 SWXMLHash 并模拟从网站下载以进行解析,我在 playground 中创建了一个包含数据的文件。我从 URLSessionManager 得到的响应数据看起来类似于: 3c3f78
我正在使用 SWXMLHash 来解析项目中的 xml 文件,它在项目中运行良好,但我想在 Playground 上进行一些测试。 当我想在 Playground 上使用库时,我一直遇到错误: Pla
我第一次尝试解析 XML 文件,并且使用 SWXMLHash。 我的 xml 文件是:
我正在使用 SWXMLHash并在 NSDate 上为 XMLElementDeserializable 编写了一个扩展。 我在 this file 的末尾了解了基本类型是如何扩展的. 我看到的是这样
我克隆了SourceKitten来自 github,当我在 Xcode 中打开项目时,我无法构建 在类Clang+SourceKitten.swift中,我得到No such module SWXML
我一直在关注 SWXMLHash 中的示例反序列化 XML 文件。它工作得很好,但我不确定如何处理 XML 输入不完整的情况: 例如,假设 XML 输入是这样的: 0.0
我正在处理一个处理 xml 响应的项目。经过搜索,我在 github 上找到了一个库 drmohundro/SWXMLHash灵感来自“Swifty JSON”。使用一段时间后,我意识到我无法通过
Push Notifications Tutorial: Getting Started来自raywenderlich,在构建启动项目时,错误显示: .Element Ambiguous use of
我刚刚将我的项目转换为 swift 4,但是当我使用 SWXMLHash 模拟我的应用程序时出现错误: var code: Int! = nil var message: String
我有以下使用 SWXMLHash 的代码——但 XML 解析器似乎无法处理它。我检查了 URL 以确保它返回数据: let baseUrl = "http://apps.hha.co.uk/mis/A
我正在尝试使用自述文件末尾提供的示例将 XML 反序列化为一个类,但它引发了与最初引发的编译时错误相同的错误 this question . method 'deserialize' in non-f
这是我的代码块, var a = 0; let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data,
我想使用 SWXMLHASH 或 AEXML 库从我博客的 RSS URL 解析 XML。我为此找到了解决方案,但是当我尝试该解决方案时,我的应用程序崩溃了。是遇到的问题:fatal error: u
当我尝试显示取自 的“50%”时 forecast > area > forecast-period > text > probability_of_precipitation 它在我的 Storyb
我在 Swift 4 中使用 pod pod 'SWXMLHash', '~> 4.0.0' pod 'Alamofire', '~> 4.5' 当我使用以下代码解析 XML 时,出现错误: Type
我是一名优秀的程序员,十分优秀!