5
NSLayoutConstraint를 재 할당하려고합니다.'NSLayoutConstraint'유형의 불변 값을 inout 인수로 전달할 수 없습니다.
class ViewController: UIViewController {
@IBOutlet weak var myConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
exchangeConstraint(&myConstraint)
}
}
extension UIViewController {
func exchangeConstraint(_ constraint: inout NSLayoutConstraint) {
let spacing = constraint.constant
view.removeConstraint(constraint)
constraint = view.topAnchor.constraint(equalTo: anotherView.topAnchor, constant: spacing)
view.addConstraint(constraint)
}
}
그러나 여기 나에게 오류를 제공합니다 : 그것은 불변의 값을 말한다 왜 제약 조건이 변수가 아닌 상수로 선언되는 반면
exchangeConstraint(&myConstraint)
-------------------^
Cannot pass immutable value of type 'NSLayoutConstraint' as inout argument
내가 뭘 이해하지 못하는 것은입니다.
제약 그런 식으로 작동하지 않습니다
UPDATE 여기
내가 그것을 사용하는 프로젝트입니다. 이전 제약 조건을 제거하고 새 제약 조건을 설치해야합니다 (상수 속성을 수정할 수는 있지만 inout 매개 변수는 필요하지 않습니다). 어쨌든 inout 매개 변수를 사용하는 아주 좋은 이유가 있어야합니다. 그것이 원하는 경우 함수가 새 제한 조건을 반환하는 것이 더 좋습니다. – Paulw11
예, 현재 제 코드를 계속 실행하는 것이 좋습니다. 그래서'myConstraint = doSomething (myConstraint)'. 한 줄에 두 번 변수를 사용하는 것을 좋아하지 않습니다. 나는 더 깨끗한 방법을 희망한다. – lukwuerz
부작용 (inout 매개 변수)을 사용하는 것보다 더 깨끗한 방법입니다. 앞에서 말했듯이 새로운 제약 조건을 추가하기 전에 기존 제약 조건을 제거해야합니다. 기존 제약 조건에 대한 참조가 없다면 그렇게하기 어려울 것입니다. – Paulw11