无法转换 UILayoutPriority 类型的值
Cannot convert value of type UILayoutPriority
我正在尝试将一个约束的优先级更改为高于另一个约束的优先级。在 Swift 4 / iOS 11 中,此代码不再编译:
let p = self.lab2.contentCompressionResistancePriority(for:.horizontal)
self.lab1.setContentCompressionResistancePriority(p+1, for: .horizontal)
我该怎么做?
在Swift4 / iOS11中,UILayoutPriority不再是简单的数字;它是一个 RawRepresentable 结构。您必须通过结构的 rawValue
来计算。
手头有一个扩展程序可能会有用:
extension UILayoutPriority {
static func +(lhs: UILayoutPriority, rhs: Float) -> UILayoutPriority {
let raw = lhs.rawValue + rhs
return UILayoutPriority(rawValue:raw)
}
}
现在 +
运算符可用于将 UILayoutPriority 与数字组合,就像过去一样。您问题中的代码现在可以正确编译(并工作)。
EDIT 在 iOS 13 中不再需要此扩展,因为它已直接合并到系统中(另外您现在可以初始化 UILayoutPriority 而无需说 rawValue:
).尽管如此,我仍然不明白为什么 Apple 曾经认为 priority
除了数字之外的任何东西都是一个好主意,因为这就是它的全部或需要的。
您可以执行以下操作以像以前一样继续使用它们:
import UIKit
// MARK: - Allow to pass a float value to the functions depending on UILayoutPriority
extension UILayoutPriority: ExpressibleByFloatLiteral {
public typealias FloatLiteralType = Float
public init(floatLiteral value: Float) {
self.init(value)
}
}
// MARK: - Allow to pass an integer value to the functions depending on UILayoutPriority
extension UILayoutPriority: ExpressibleByIntegerLiteral {
public typealias IntegerLiteralType = Int
public init(integerLiteral value: Int) {
self.init(Float(value))
}
}
请参阅 https://gist.github.com/jeremiegirault/7f73692a162b6ecf8ef60c7809e8679e 了解完整的实施方式
我正在尝试将一个约束的优先级更改为高于另一个约束的优先级。在 Swift 4 / iOS 11 中,此代码不再编译:
let p = self.lab2.contentCompressionResistancePriority(for:.horizontal)
self.lab1.setContentCompressionResistancePriority(p+1, for: .horizontal)
我该怎么做?
在Swift4 / iOS11中,UILayoutPriority不再是简单的数字;它是一个 RawRepresentable 结构。您必须通过结构的 rawValue
来计算。
手头有一个扩展程序可能会有用:
extension UILayoutPriority {
static func +(lhs: UILayoutPriority, rhs: Float) -> UILayoutPriority {
let raw = lhs.rawValue + rhs
return UILayoutPriority(rawValue:raw)
}
}
现在 +
运算符可用于将 UILayoutPriority 与数字组合,就像过去一样。您问题中的代码现在可以正确编译(并工作)。
EDIT 在 iOS 13 中不再需要此扩展,因为它已直接合并到系统中(另外您现在可以初始化 UILayoutPriority 而无需说 rawValue:
).尽管如此,我仍然不明白为什么 Apple 曾经认为 priority
除了数字之外的任何东西都是一个好主意,因为这就是它的全部或需要的。
您可以执行以下操作以像以前一样继续使用它们:
import UIKit
// MARK: - Allow to pass a float value to the functions depending on UILayoutPriority
extension UILayoutPriority: ExpressibleByFloatLiteral {
public typealias FloatLiteralType = Float
public init(floatLiteral value: Float) {
self.init(value)
}
}
// MARK: - Allow to pass an integer value to the functions depending on UILayoutPriority
extension UILayoutPriority: ExpressibleByIntegerLiteral {
public typealias IntegerLiteralType = Int
public init(integerLiteral value: Int) {
self.init(Float(value))
}
}
请参阅 https://gist.github.com/jeremiegirault/7f73692a162b6ecf8ef60c7809e8679e 了解完整的实施方式