【问题标题】:Auto Layouts in Swift: 'String' is not identical to 'NSObject'Swift 中的自动布局:“String”与“NSObject”不同
【发布时间】:2014-11-26 15:27:40
【问题描述】:

我正在关注此页面上的教程:

http://makeapppie.com/2014/07/26/the-swift-swift-tutorial-how-to-use-uiviews-with-auto-layout-programmatically/

我在代码中达到了这一点:

let dict = ["list":list]
let lcH = NSLayoutConstraint.constraintsWithVisualFormat("H:[list(100)]", options: NSLayoutFormatOptions(0), metrics: nil, views: dict)

最后一行产生了这个错误(箭头指向dict):

'String' is not identical to 'NSObject'

我最初试图将 Objective C code in this tutorial 转换为 Swift,但我在同一个地方遇到了完全相同的错误。当时我认为这是我错误地转换代码的结果,但现在我按照这个 Swift 教程得到了完全相同的结果。

谁能告诉我我做错了什么?

【问题讨论】:

    标签: swift autolayout


    【解决方案1】:

    选项点击dict。这将告诉你 Swift 推断它的类型。我猜是[String: UIView?]。字典中的值不能是可选项,所以创建dict时需要解包list

    let dict = ["list":list!]
    

    【讨论】:

    • 太棒了!谢谢你 - 现在当我添加约束时,它抱怨'NSArray' is not a subtype of 'NSLayoutConstraint'
    • NSLayoutConstraint.constraintsWithVisualFormat() 返回一个约束数组。它的类型是 [AnyObject] - AnyObject 的数组。您需要拨打addConstraints 而不是addConstraint。它返回一组约束的原因是视觉格式可以而且经常确实会导致创建多个约束。
    • 最后就是那个小“s”……对着屏幕挥舞着我的拳头。谢谢 vacawama
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多