【问题标题】:Expression type is ambiguous without more context表达式类型不明确,没有更多上下文
【发布时间】:2016-09-26 09:53:46
【问题描述】:

我正在尝试将 3rd 方库(Ramotion 扩展集合)迁移到 swift 3。 我指出了一些瓶颈。

我有这个结构:

struct ConstraintInfo {
  var attribute: NSLayoutAttribute = .left
  var secondAttribute: NSLayoutAttribute = .notAnAttribute
  var constant: CGFloat = 0
  var identifier: String?
  var relation: NSLayoutRelation = .equal
}

这个运算符有一些重载:

precedencegroup 比较Precedence { 关联性:左 高于:LogicalConjunctionPrecedence }

infix operator >>>- : ComparisonPrecedence

func >>>- <T: UIView> (left: (T, T), block: (_: inout ConstraintInfo) -> ()) -> NSLayoutConstraint {
  var info = ConstraintInfo()
  block(&info)
  info.secondAttribute = info.secondAttribute == .notAnAttribute ? info.attribute : info.secondAttribute

  let constraint = NSLayoutConstraint(item: left.1,
                                  attribute: info.attribute,
                                  relatedBy: info.relation,
                                  toItem: left.0,
                                  attribute: info.secondAttribute,
                                  multiplier: 1,
                                  constant: info.constant)
  constraint.identifier = info.identifier
  left.0.addConstraint(constraint)
  return constraint
}

UIView 扩展中的这个方法:

func addScaleToFillConstratinsOnView(_ view: UIView) {
    [NSLayoutAttribute.left, .right, .top, .bottom].forEach { attribute in
        (self, view) >>>- { $0.attribute = attribute } // this line is erroring
    }
  }

错误提示:

"'>>>-' 产生 'NSLayoutConstraint',而不是预期的上下文结果类型 'Void' (aka '()')"

我将错误行改为

var _: NSLayoutConstraint = (self, view) >>>- { $0.attribute = attribute }

现在我得到了:

表达式类型 '()' 在没有更多上下文的情况下是模棱两可的

另外,如果我写:

$0.attribute as! NSLayoutAttribute = attribute as! NSLayoutAttribute

我遇到了不可变性错误。

我错过了什么?

【问题讨论】:

    标签: closures swift3


    【解决方案1】:

    就我而言,我是这样解决的:

    [NSLayoutAttribute.left, .right, .centerY].forEach { attribute in
          _ = (view, collectionView) >>>- {
            var _: ConstraintInfo = $0
            $0.attribute = attribute
            }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2019-02-01
      • 2019-04-22
      • 1970-01-01
      相关资源
      最近更新 更多