【问题标题】:swift cannot convert value of type (_, _) -> _ to expected argument type '((_, CGFloat)) -> _swift 无法将 (_, _) -> _ 类型的值转换为预期的参数类型 '((_, CGFloat)) -> _
【发布时间】:2017-11-02 06:59:16
【问题描述】:

我正在使用库URLEmbeddedView

它在其库中定义了以下代码:

func addConstraints(with view: UIView, center: CGPoint, multiplier: CGFloat = 1) {
    view.translatesAutoresizingMaskIntoConstraints = false
    addConstraints([
            (.centerX, center.x),
            (.centerY, center.y)
        ]
        .flatMap {
            .init(item: view,
                  attribute: $0,
                  relatedBy: .equal,
                  toItem: self,
                  attribute: $0,
                  multiplier: multiplier,
                  constant: $1)
        })
}

我们正在通过库生成链接预览,但出现以下错误:

无法将类型 (_, _) -> _ 的值转换为预期的参数类型 '((_, CGFloat)) -> _" 在 .flapMap 行。

我熟悉Objective-C,但不熟悉Swift。代码中会出现什么问题?

【问题讨论】:

  • 您使用的是哪个 iOS 版本?
  • 我们正在检查 iOS 10.1 @PGDev
  • 您在哪一行遇到问题?
  • @PGDev 我附上了一张图片以获取更多信息。

标签: ios swift nslayoutconstraint


【解决方案1】:

还需要使用8.1以上的Xcode版本。

我使用了与您相同的代码。只需将约束应用于view,它就可以完美运行。

   view.addConstraints([
        (.centerX, center.x),
        (.centerY, center.y)
        ].flatMap {
            .init(item: view, attribute: $0, relatedBy: .equal, toItem: self, attribute: $0, multiplier: multiplier, constant: $1)
    })

flatMap 语法没有问题。我已经在Xcode-9Xcode-8 上执行了代码,它没有给我任何错误。

只使用我上面写的相同代码,看看它是否编译正确。

【讨论】:

  • self.view 不一定是传入的视图
  • 它只是您想要应用约束的任何视图。
【解决方案2】:

正在调用错误的addConstraints()

当你想打电话给view.addConstraints()时,你打电话给viewController.addConstraints()

将第二个addConstraints()改为view.addConstraints()

【讨论】:

  • @BhargavSoni 更新了答案。在我这边确认了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多