参数标签'(stringInterpolationSegment :)'与任何可用的重载都不匹配

时间:2019-03-27 03:39:28

标签: swift xcode10.2

更新最新的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

3 个答案:

答案 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:)

产生最终的内插字符串

信用:raywenderlich

答案 2 :(得分:1)

public func == <T>(lhs: ResultTest<T>, rhs: ResultTest<T>) -> Bool {
    return  "\(lhs)" == "\(rhs)"
}