TypedContentAccessors
public protocol TypedContentAccessors
Mixin that provides convenience accessors for the content of an optional contained entity.
Allows you to replace the following:
resource.latestData?.content as? String
(resource.latestError?.entity?.content as? [String:AnyObject])?["error.detail"]
…with:
resource.text
resource.latestError?.jsonDict["error.detail"]
You can extend this protocol to provide your own convenience accessors. For example:
extension TypedContentAccessors {
var doorknob: UIDoorknob {
return typedContent(ifNone: placeholderKnob)
}
}
Note that the sample code above is only a convenience accessor. It checks whether the entity already has a
UIDoorknob, but does not do any parsing to put a UIDoorknob there in the first place. You’d need to pair this with
a custom ResponseTransformer that converts raw doorknob responses to UIDoorknobs.
-
The type of entity content the implementing type provides. Often
Any.Declaration
Swift
associatedtype ContentType -
The entity to which the convenience accessors will apply.
Declaration
Swift
var entityForTypedContentAccessors: Entity<ContentType>? { get } -
typedContent(ifNone:Extension method) A convenience for retrieving the content in this container when you expect it to be of a specific type. For example, if you expect the content to be a UIImage:
let image = resource.typedContent(ifNone: UIImage(named: "placeholder.png"))See also
See also
Declaration
Swift
public func typedContent<T>(ifNone defaultContent: @autoclosure () -> T) -> TReturn Value
The content if it is present and can be downcast to a type matching both the
ifNoneparameter and the inferred return type; otherwise returnsifNone. -
typedContent(ifNone:Extension method) Variant of
typedContent(ifNone:)with optional input & output.Declaration
Swift
public func typedContent<T>(ifNone defaultContent: @autoclosure () -> T?) -> T? -
typedContent()Extension methodA variant of
typedContent(ifNone:)that infers the desired type entirely from context, and returns nil if the content is either not present or cannot be cast to that type. For example:func showUser(_ user: User?) { ... } showUser(resource.typedContent()) // Infers that desired type is UserDeclaration
Swift
public func typedContent<T>() -> T? -
jsonDictExtension methodReturns content if it is a dictionary with string keys; otherwise returns an empty dictionary.
Declaration
Swift
public var jsonDict: [String : Any] { get } -
jsonArrayExtension methodReturns content if it is an array; otherwise returns an empty array.
Declaration
Swift
public var jsonArray: [Any] { get } -
textExtension methodReturns content if it is a string; otherwise returns an empty string.
Declaration
Swift
public var text: String { get }
View on GitHub
TypedContentAccessors Protocol Reference