gpt4 book ai didi

ios - 创建一种更简洁的方法来设置具有多个 init 的结构?

转载 作者:行者123 更新时间:2023-11-29 05:12:46 24 4
gpt4 key购买 nike

我目前有一个结构体,有多种初始化方法。目前它有效,我只是想知道是否有更干净的方法来创建结构?在这里:

    struct Destination {
var name: String? = "Unkown"
var waypoint: JMapWaypoint?

init(destination: JMapDestination) {
self.name = destination.name
self.waypoint = destination.waypoints?.first
}


init (waypoint: JMapWaypoint) {
self.waypoint = waypoint
self.name = "Shared Location"

}


init(point: CGPoint, name: String, mapController: JMapController){
self.name = name
let pointToJMapPoint = JMapPoint.init(x: Float(point.x),
y: Float(point.y),
z: Float(mapController.userLocation.mapId))


self.waypoint = mapController.getNearestWaypoint(with: pointToJMapPoint ?? JMapPoint())
}
}

最佳答案

我不知道你理解的清洁是什么意思。有很多方法可以减少代码中的 init。您可以给它们一个默认值,例如,或者创建一些名为 DestinationParams 的其他结构,其中将包含您需要的所有参数。

struct Destination {
private (set) var name: String
private (set) var waypoint: JMapWaypoint?

init(destination: JMapDestination? = nil) {
self.init(name: destination?.name ?? "Shared Location",
waypoint: destination?.waypoints?.first)
}

init(name: String, point: JMapPoint? = JMapPoint(), mapController: JMapController) {
let waypoint = mapController.getNearestWaypoint(with: point)
self.init(name: name,
waypoint: waypoint)
}

private init(name: String, waypoint: JMapWaypoint?) {
self.waypoint = waypoint
self.name = name
}
}

或者,您可以通过将所有计算移到 init 之外来修改它,如下所示:

...
let pointToJMapPoint = JMapPoint.init(x: Float(point.x),
y: Float(point.y),
z: Float(mapController.userLocation.mapId))
let point = mapController.getNearestWaypoint(with: pointToJMapPoint ?? JMapPoint())
let x = Destination(name: "Some name", waypoint: point)
...
struct Destination {
private (set) var name: String
private (set) var waypoint: JMapWaypoint?

init(destination: JMapDestination? = nil) {
self.init(name: destination?.name ?? "Shared Location",
waypoint: destination?.waypoints?.first)
}

init(name: String, waypoint: JMapWaypoint?) {
self.waypoint = waypoint
self.name = name
}
}

这一切都取决于您,取决于您想要什么。

关于ios - 创建一种更简洁的方法来设置具有多个 init 的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59523409/

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