gpt4 book ai didi

ios - 无法分配给属性 : 'self' is immutable swift error

转载 作者:搜寻专家 更新时间:2023-11-01 05:54:54 35 4
gpt4 key购买 nike

在我的应用程序中,我创建了一个名为“Positions”的协议(protocol),并扩展了 UIView 类以符合该协议(protocol),以便向 UIView 类添加一些属性。我使用了下面的代码。

import Foundation
import UIKit

protocol Positions {
var initialPositions: [CGRect] {get set}
var finalPositions: [CGRect] {get set}
var positionsAreDefined: Bool {get}
}

public enum PositionsType {
case initial
}

private var initialPositionKey: UInt = 0
private var finalPositionKey: UInt = 0

extension Positions {
var initialPositions: [CGRect] {
get {
if objc_getAssociatedObject(self, &initialPositionKey) != nil {
return objc_getAssociatedObject(self, &initialPositionKey) as! [CGRect]
} else {
return [] as! [CGRect]
}

}
set {
objc_setAssociatedObject(self, &initialPositionKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}

var finalPositions: [CGRect] {
get {
if objc_getAssociatedObject(self, &finalPositionKey) != nil {
return objc_getAssociatedObject(self, &finalPositionKey) as! [CGRect]
} else {
return [] as! [CGRect]
}
}

set {
objc_setAssociatedObject(self, &finalPositionKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}

var positionsAreDefined: Bool {
get {return initialPositions.count != 0 && finalPositions.count != 0 && initialPositions.count == finalPositions.count}
}

var positionsCount: Int {
get {return initialPositions.count}
}
}

extension UIView: Positions {}

好吧,今天我尝试使用一种新方法来扩展 UIView 类,该方法更改了我添加的属性,但是编译器在我尝试修改属性值的那一行给了我这个错误:

Cannot assign to property: 'self' is immutable

方法如下:

public func horizontallyInContainer(withShift shift: CGFloat, forExpansionNumber index: Int, forPositionType type: PositionsType) {
if self.positionsAreDefined && self.superview != nil {
if type == .initial {

var newPositions = self.initialPositions
newPositions[index].origin.x = self.superview!.bounds.width * 0.5 - self.bounds.width + shift
self.initialPositions = newPositions //Here happens the error

} else {

var newPositions = self.finalPositions
newPositions[index].origin.x = self.superview!.bounds.width * 0.5 - self.bounds.width + shift
self.finalPositions = newPositions //Also here happens

}
}
}

任何人都可以向我解释该错误的性质吗?

最佳答案

使协议(protocol)成为引用类型

protocol Positions: AnyObject {

关于ios - 无法分配给属性 : 'self' is immutable swift error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52727345/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com