Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否在Swift中正确使用了结构和协议?_Swift - Fatal编程技术网

我是否在Swift中正确使用了结构和协议?

我是否在Swift中正确使用了结构和协议?,swift,Swift,POI代表以下代码中的兴趣点 我正试图区分有兴趣点的路线。路线可以是东/西向路线或北/南向路线 我有一个确定路线是东/西向还是北/南向的方法: func getRouteDirection()->路由{…}的方向 基于此方法中确定的方向,该方法构造一个要返回的DirectionForRoute对象。此对象具有以下定义: protocol Couplable{} struct DirectionForRoute{ var routeDirection: String var P

POI代表以下代码中的兴趣点

我正试图区分有兴趣点的路线。路线可以是东/西向路线或北/南向路线

我有一个确定路线是东/西向还是北/南向的方法:

func getRouteDirection()->路由{…}的方向

基于此方法中确定的方向,该方法构造一个要返回的
DirectionForRoute
对象。此对象具有以下定义:

protocol Couplable{}

struct DirectionForRoute{

    var routeDirection: String
    var POIs: Couplable

    init(routeDirection: String, POIs: Couplable) {
        self.routeDirection = routeDirection
        self.POIs  = POIs
    }

}
routeddirection
变量是不言自明的,它基本上采用两个可能值中的一个,即
“东/西”
“北/南”

然而,
POIs
变量要复杂一些。根据路线的方向,我希望将
POIs
变量指定为两种可能的结构之一:

struct EastWestBoundPOIs: Couplable {
    var eastBoundPOIs: [POI]
    var westBoundPOIs: [POI]

    init(eastBoundPOIs: [POI], westBoundPOIs: [POI]) {
        self.eastBoundPOIs = eastBoundPOIs
        self.westBoundPOIs = westBoundPOIs
    }
}

struct NorthSouthBoundPOIs: Couplable {
    var northBoundPOIs: [POI]
    var southBoundPOIs: [POI]

    init(northBoundStops: [POI], southBoundStops: [POI]) {
        self.northBoundPOIs = northBoundPOIs
        self.southBoundPOIs = southBoundPOIs
    }
}
getRouteDirection()
方法返回类型为
DirectionForRoute
的值时,我无法访问分配给
POIs
变量的最后两个结构的内部变量,因为它属于
可耦合的类型

我的问题是,我是否正确地使用结构来实现我想要做的事情?有更好的方法吗


注:如果可能的话,我想尽量避免选角。

我不明白你为什么不写一些更简单、更接近人类直觉的东西:

enum Direction {
    case northSouth
    case eastWest
}

enum Side {
    case left
    case right
}

struct POI {
    let side : Side
}

struct Route {
    let pois : [POI]
    let direction : Direction
}

你现在只需要为“左”和“右”的含义制定一个惯例。假设它们是根据方向名称中的第一个方向计算的。现在,在给定路线的情况下,计算哪些POI位于我们行驶的道路一侧是很简单的。

这里有一个想法。它比您的解决方案更简单,但没有那么好的命名约定。然而,它可能会给您一些想法,并允许您重构以满足您的确切需求

首先,不要使用表示方向的
字符串
,而是使用
枚举

enum Direction {
    case northSouth
    case eastWest
}
接下来,您的
DirectionForRoute
命名为
Route
会更有意义,它有一个方向和一些兴趣点

struct Route {
    var direction: Direction
    var northOrEastPOIs: [POI]
    var southOrWestPOIs: [POI]
}

这真的是你的代码吗?行
self.routeDirection=routeDirection
没有意义,因为没有名为
routeDirection
的传入参数。在我的机器上,这是一个编译错误:“错误:将属性分配给自身”。@matt可能只是一个输入错误<代码>路由绑定
用于
路由定向
混淆。这是一个输入错误。我修好了@matt@nathan当然这是一个打字错误,但OP的工作是显示有意义的代码。酷。-我得承认我不知道你想干什么。对于我来说,你需要一个完整的结构来判断一条路线是东西走向还是南北走向的想法似乎有些疯狂,我不明白一个方向怎么会有泊松,为什么会有泊松。我一点也不明白为什么你需要两种POI。你的类型应该像真实世界的东西。在现实生活中,我们不是这样想的。在现实生活中,路线有方向,也有POI。完成。怎么了?