swift 无法将类型 (_, _) -> _ 的值转换为预期的参数类型 '((_, CGFloat)) -> _

swift cannot convert value of type (_, _) -> _ to expected argument type '((_, CGFloat)) -> _

我正在使用图书馆 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: [=11=],
                  relatedBy: .equal,
                  toItem: self,
                  attribute: [=11=],
                  multiplier: multiplier,
                  constant: )
        })
}

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

cannot convert value of type (_, _) -> _ to expected argument type '((_, CGFloat)) -> _" at .flapMap line.

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

正在调用错误的 addConstraints()

您正在呼叫 viewController.addConstraints(),但您似乎想呼叫 view.addConstraints()

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

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

我用过和你一样的代码。只需将约束应用于 view 即可完美运行。

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

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

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