1

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

3 回答 3

2

该错误是由于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)"
于 2019-03-27T05:43:04.547 回答
1
public func == <T>(lhs: ResultTest<T>, rhs: ResultTest<T>) -> Bool {
    return  "\(lhs)" == "\(rhs)"
}
于 2019-06-13T05:37:12.600 回答
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:)生成最终的插值字符串

信用:雷文德利希

于 2019-03-27T05:39:41.760 回答