5
olarak değiştirilemedi. Referans URL'si NSLayoutConstraint'i yeniden atamaya çalışıyorum.'NSLayoutConstraint' türünün değişmez değeri inout argümanı
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)
}
}
Ama burada bana hata verir: o değişmez değer diyor neden kısıt bir değişken değil, sabit olarak ilan oysa
exchangeConstraint(&myConstraint)
-------------------^
Cannot pass immutable value of type 'NSLayoutConstraint' as inout argument
Ne anlamıyorum vardır.
Kısıtlamaları böyle çalışmaz:
GÜNCELLEME İşte
Bunu kullanmak bir projedir. Eski kısıtlamayı kaldırmanız ve yeni bir tane yüklemeniz gerekir (sabit özelliği değiştirebilir, ancak bunun için bir inout parametresine ihtiyacınız yoktur). Zaten inout parametrelerini kullanmak için çok iyi bir nedeniniz olmalı. İstediğiniz şey buysa, fonksiyonun yeni bir kısıtlama getirmesi daha iyidir. – Paulw11
evet, şu anda kodumu çalışır durumda tutmak için önerdiğinizi yapıyorum. bu yüzden myConstraint = doSomething (myConstraint). Tek bir şey için değişkeni iki kez bir satırda kullanmayı sevmiyorum. Umarım daha temiz bir yoldur. – lukwuerz
Bu, bir yan etki kullanıldıkça daha temiz bir yoldur (inout parametresi). Söylediğim gibi, yeni bir tane eklemeden önce varolan kısıtlamayı kaldırmanız gerekir, eğer mevcut kısıtlama referansı yoksa, bunu yapmak zor olacaktır. – Paulw11