参数标签'(stringInterpolationSegment :)'与任何可用的重载都不匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了参数标签'(stringInterpolationSegment :)'与任何可用的重载都不匹配相关的知识,希望对你有一定的参考价值。
更新最新的Xcode版本10.2(10E125)后,我收到此错误:
参数标签'(stringInterpolationSegment :)'与任何可用的重载都不匹配
找不到任何解决方案,有什么想法吗?
let interpolation1 = String(stringInterpolationSegment:self.addSpotAnnotation!.coordinate.latitude)
let interpolation2 = String(stringInterpolationSegment:self.addSpotAnnotation!.coordinate.longitude)
let coordinate:String = interpolation1 + "," + interpolation2
该错误是由于changes如何在Swift 5中进行字符串插值。
解决方案不是用String(stringInterpolationSegment:)
替换String(stringInterpolation:)
:
我们不建议保留现有的init(stringInterpolation :)或init(stringInterpolationSegment :)初始值设定项,因为它们始终记录为不应直接使用的调用。 [强调补充]
你给出的例子:
coordinate:String =
String(stringInterpolationSegment: self.addSpotAnnotation!.coordinate.latitude)
+ ","
+ String(stringInterpolationSegment: self.addSpotAnnotation!.coordinate.longitude)
可以更容易地写成:
let coordinate = "\(self.addSpotAnnotation!.coordinate.latitude),\(self.addSpotAnnotation!.coordinate.longitude)"
字符串插值更新
Swift 4.2通过插入段实现字符串插值:
let language = "Swift"
let languageSegment = String(stringInterpolationSegment: language)
let space = " "
let spaceSegment = String(stringInterpolationSegment: space)
let version = 4.2
let versionSegment = String(stringInterpolationSegment: version)
let string = String(stringInterpolation: languageSegment, spaceSegment, versionSegment)
在此代码中,编译器首先包装每个文本段,然后使用init(stringInterpolationSegment :)插入一个。然后,它用init(stringInterpolation :)将所有段包装在一起
Swift 5采用了完全不同的方法
// 1
var interpolation = DefaultStringInterpolation(
literalCapacity: 7,
interpolationCount: 1)
// 2
let language = "Swift"
interpolation.appendLiteral(language)
let space = " "
interpolation.appendLiteral(space)
let version = 5
interpolation.appendInterpolation(version)
// 3
let string = String(stringInterpolation: interpolation)
这是代码的作用:
使用特定容量和插值计数定义DefaultStringInterpolation实例。调用appendLiteral(:)或appendInterpolation(:)将文字和插值添加到插值中。通过调用init(stringInterpolation :)生成最终的插值字符串
public func == <T>(lhs: ResultTest<T>, rhs: ResultTest<T>) -> Bool
return "\(lhs)" == "\(rhs)"
以上是关于参数标签'(stringInterpolationSegment :)'与任何可用的重载都不匹配的主要内容,如果未能解决你的问题,请参考以下文章