更新最新的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
答案 0 :(得分:2)
该错误是由于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)"
答案 1 :(得分:1)
字符串插值更新
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:)
产生最终的内插字符串答案 2 :(得分:1)
public func == <T>(lhs: ResultTest<T>, rhs: ResultTest<T>) -> Bool {
return "\(lhs)" == "\(rhs)"
}