gpt4 book ai didi

swift - 为什么不能使用协议(protocol)(没有 associatedtype-s)类型作为类型别名来符合其他协议(protocol)的关联类型?

转载 作者:行者123 更新时间:2023-11-28 13:32:12 24 4
gpt4 key购买 nike

<分区>

我有以下代码:

protocol User {
var photo: Int { get }
}

protocol Relationship {
associatedtype Member: User

var first: Member { get }
var second: Member { get }
}

protocol Friend: User {
var a: Int { get }
}

protocol Lover: User {
var b: String { get }
}

protocol Friendship: Relationship
where Member: Friend {
var c: String { get }
}

protocol Love: Relationship
where Member: Lover {
var d: String { get }
}

enum RelationshipRecord<F, L>: Relationship
where F: Friendship, L: Love {

case friendship(value: F)
case love(value: L)

typealias Member = User

var first: Member {
switch self {
case .friendship(let o): return o.first
case .love(let o): return o.first
}
}

var second: Member {
switch self {
case .friendship(let o): return o.second
case .love(let o): return o.second
}
}
}

由于编译我有以下错误:

error: type 'RelationshipRecord' does not conform to protocol 'Relationship'

enum RelationshipRecord<F, L>: Relationship

和注释:

note: possibly intended match 'RelationshipRecord.Member' (aka 'User') does not conform to 'User'

typealias Member = User

,

note: protocol requires nested type 'Member'; do you want to add it?

associatedtype Member:

经过问题调查,我知道将 User 从协议(protocol)更改为类可以使代码可编译。

class User {
var photo: Int { return 0 }
}

但这不是我需要的。
是否可以同时保存:1) 用户作为协议(protocol)和 2) 示例中的架构?
如果不是,为什么?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com