Swift 为什么可以';我不能初始化这个结构吗?

Swift 为什么可以';我不能初始化这个结构吗?,swift,generics,swift-structs,Swift,Generics,Swift Structs,我想做一个Swift错误,描述来自Objective-C的变量的类型是如何错误的。下面是我如何定义结构的: public struct UnexpectedResultTypeError:错误{ let expected:expected.Type 让实际值:实际值。类型 init(预期的:预期的.Type,实际的:实际的.Type){ self.expected=预期 self.actual=实际 } } 我认为这很好,但现在我无法初始化它: UnexpectedResultTypeErro

我想做一个Swift
错误
,描述来自Objective-C的变量的
类型
是如何错误的。下面是我如何定义
结构的:

public struct UnexpectedResultTypeError:错误{
let expected:expected.Type
让实际值:实际值。类型
init(预期的:预期的.Type,实际的:实际的.Type){
self.expected=预期
self.actual=实际
}
}
我认为这很好,但现在我无法初始化它:

UnexpectedResultTypeError<String, Any>(expected: String.self, got: type(of: serializedResult))
UnexpectedResultTypeError(应为:String.self,get:type(of:serializedResult))
无法使用类型为“(应为String.type,get:Any.type)”的参数列表调用类型为“UnexpectedResultTypeError”的初始值设定项

比较。使用通用占位符
T
,当
T
是某个协议
P
Any
被编译器视为协议)时,
T.Type
不是
P.Type
。这是
P.Protocol
,所以在您的情况下
Any.Protocol
Any.Protocol
可以容纳的唯一值是
Any.self
。您真的需要在此处使用通用占位符吗?
UnexpectedResultTypeError
真的与
UnexpectedResultTypeError
完全不同吗?我建议您只需要一个非泛型结构,它有两个类型为
Any.type
@Hamish的属性,我更喜欢区分
Int
Dictionary
,这里。另外,由于我期望某些内容,因此我没有值来填充一个非类型的
expected
字段。我不确定我是否理解您的意思。另外,如果您将此类型作为
错误抛出,那么您肯定只想捕获
意外的结果类型错误,而不是它的许多不同的专门化?我真的看不出在这里使用通用占位符有什么好处。@Hamish我想捕捉一个通用错误,让Swift的内置字符串化为我提供类似
UnexpectedResultTypeError(预期:Swift.String,实际:Swift.Dictionary)