[英]ClosedInterval<String> different declaration
这两个状态器可以正常工作并返回相同的值:
println(("A"..."Z").contains("B"))
和
var range = "A"..."Z"
println(range.contains("B"))
但是,如果我尝试这样做:
var c : Character = "B"
var range = "A"..."Z"
//println(range.contains(c))
println(("A"..."Z").contains(c))
注释行输出以下错误:
'Character' is not convertible to 'String'
这里发生了什么? 变量c
不是Character
类型吗?
不是c
不是Character
,而是range
是ClosedInterval<String>
。
像"A"
这样的字符串文字都可以转换为String
或Character
因为两者都实现了ExtendedGraphemeClusterLiteralConvertible
。
当您将range
定义为"A"..."Z"
,编译器无法推断您以后如何使用range
,因此只需使用以下ClosedInterval<String>
定义range
: ClosedInterval<String>
。
当您定义范围并立即使用它时,例如:( ("A"..."Z").contains(c)
,编译器可以看到c
是一个Character
因此它将范围创建为ClosedInterval<Character>
。
您可以将range
强制为ClosedInterval<Character>
然后看到其中contains
Character
的作品:
var range: ClosedInterval<Character> = "A"..."Z"
var c : Character = "B"
println(range.contains(c))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.