aşağıdaki protokolü ve onun uzantısı bina üzerindeSwift protokol - tipi bir şartı
public protocol RESEndpointReachable: CustomDebugStringConvertible
{
associatedtype EndpointType: RESEndpointReachable
// MARK: - Properties
/// The name of the endpoint as defined in the REST URI.
var name: String { get }
/// An array of possible next endpoints that this endpoint can reach. E.g account's next endpoints would be authenticate and unauthenticate.
var nextPossibleEndpoints: [EndpointType] { get }
// MARK: - Ability
/// Used to process the endpoint.
func processRequest(request: RERequest)
/// Processes the next endpoint that matches the name `name`. Expects an endpoint with the name `name` to exist in `nextPossibleEndpoints`.
func processNextEndpointWithName(name: String, request: RERequest)
}
public extension RESEndpointReachable
{
// MARK: - CustomDebugStringConvertible
public var debugDescription: String {
return name
}
// MARK: - RESEndpointReachable
var nextPossibleEndpoints: [EndpointType] {
return []
}
public func processRequest(request: RERequest)
{
// Check all possible endpoints are being processed
if let nextEndpoint = nextPossibleEndpoints.first
{
fatalError("Unhandled endpoint \(nextEndpoint).")
}
}
public func processNextEndpointWithName(name: String, request: RERequest)
{
// Get the next endpoint that matches the specified name
let nextEndpoints = nextPossibleEndpoints.filter { $0.name == name }
if nextEndpoints.count > 1
{
fatalError("Multiple next endpoints found with the name '\(name)'.")
}
guard let nextEndpoint = nextEndpoints.first else
{
fatalError("No next endpoint with the name '\(name)'.")
}
// Process the next endpoint
nextEndpoint.processRequest(request)
}
}
sahip olarak kendini referans olmayabilir, satır associatedtype EndpointType: RESEndpointReachable
aşağıdaki hata var: Type may not reference itself as a requirement
. Ama anladığım kadarıyla, Swift'de ilişkili türleri nasıl kullanıyorsunuz.
Tahmin ettiğiniz gibi, her zaman 'un, RESEndpointReachable
'dan devralınacak bir tür olarak ayarlanmasını istiyor.
Bu özellik possi değil Şimdi sağ salla! Ref: https://gist.github.com/curtclifton/1923a47774a94e904bf0 https://forums.developer.apple.com/thread/15256. Bu özyinelemeli döngüler içinde – sargeras
Teşekkür derleyici çalışmasını sağlayacaktır :) Ben durumun olabileceğini düşündüm ... Belki gelecek ay ... –