繁体   English   中英

封闭间隔 <String> 不同的声明

[英]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 ,而是rangeClosedInterval<String>

"A"这样的字符串文字都可以转换为StringCharacter因为两者都实现了ExtendedGraphemeClusterLiteralConvertible

当您将range定义为"A"..."Z" ,编译器无法推断您以后如何使用range ,因此只需使用以下ClosedInterval<String>定义rangeClosedInterval<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM