我正在尝试使用iOS 11和Swift 4的Lyft API,并在第二行收到错误,这是
重叠访问' urlComponents',但修改需要 独家访问;考虑复制到局部变量。
我不确定这意味着什么,以及我如何解决它。感谢任何帮助,谢谢!
let queryItems = parameters
.sorted { $0.0 < $1.0 }
.flatMap { components(forKey: $0, value: $1) }
var urlComponents = URLComponents(url: mutableURLRequest.url!, resolvingAgainstBaseURL: false)
urlComponents?.queryItems = (urlComponents?.queryItems ?? []) + queryItems //error here
答案 0 :(得分:25)
我猜你需要先设置一个局部变量然后改变它,试试这个:
var urlComponents = URLComponents(url: mutableURLRequest.url!, resolvingAgainstBaseURL: false)
var localVariable = urlComponents
urlComponents?.queryItems = (localVariable?.queryItems ?? []) + queryItems
答案 1 :(得分:4)
在这种情况下,问题是对可选的重叠访问
所以最简单的解决方案是先解开urlComponents
改变其queryItems
:
if var urlComponents = URLComponents(url: mutableURLRequest.url!, resolvingAgainstBaseURL: false) {
urlComponents.queryItems = (urlComponents.queryItems ?? []) + queryItems
// ...
}
答案 2 :(得分:1)
可能与问题细节没有直接关系,但是对于任何使用此错误消息进行查询的人,请注意,尝试使用歧义类型的数据时也会发生此错误(尚不清楚该错误是类还是结构)操纵时刻)。
可能出现此错误的示例:
protocol: AnItemCapableToShowDetails {
var isShowingDetails: Bool { get set }
}
class: DataItem, AnItemCapableToShowDetails {
...
var isShowingDetails = false
}
class: SomeClass {
func showDetails() {
if let dataItem = itemsArray[index] as? AnItemCapableToShowDetails {
...
dataItem.isShowingDetails = !dataItem.isShowingDetails // <- "Overlapping accesses..." error here
// because that protocol might
// potentially be applied to a struct as well
}
}
}
可能的解决方法是使它成为仅类的协议,从而确保编译器始终对类进行操作。
在Swift 4之前:
protocol: AnItemCapableToShowDetails: class {
var isShowingDetail: Bool { get set }
}
在Swift 4和更高版本中也可用(这是首选的方式):
protocol: AnItemCapableToShowDetails: AnyObject {
var isShowingDetail: Bool { get set }
}