参数标签'(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 :)生成最终的插值字符串

信用:raywenderlich

另一答案
public func == <T>(lhs: ResultTest<T>, rhs: ResultTest<T>) -> Bool 
    return  "\(lhs)" == "\(rhs)"

以上是关于参数标签'(stringInterpolationSegment :)'与任何可用的重载都不匹配的主要内容,如果未能解决你的问题,请参考以下文章

tabBar标签栏与tabs标签页

如何给html元素的onclick事件传递参数即如何获取html标签的data

JQuery判断DIV中是不是包含图片标签

jquery如何获取参数

模板语法之过滤器和标签

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