POI代表以下代码中的兴趣点。我在Swift中正确使用结构和协议吗?
我想区分具有兴趣点的路线。路线可以是东/西航线或南/北航线。
我有确定的路由是否东/西结合或南/北结合的方法:
func getRouteDirection() -> DirectionForRoute{...}
基于该方法中所确定的方向,所述方法构造一个DirectionForRoute
对象返回。此对象具有以下定义:
protocol Couplable{}
struct DirectionForRoute{
var routeDirection: String
var POIs: Couplable
init(routeDirection: String, POIs: Couplable) {
self.routeDirection = routeDirection
self.POIs = POIs
}
}
的routeDirection
变量是不言自明的,它基本上有两个可能的值要么"EAST/WEST"
或"NORTH/SOUTH"
之一。但是,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
变量,因为它是Couplable
类型。
我的问题是,我是否正确地使用结构来实现我期待的目标?有一个更好的方法吗?
P.S.如果可能的话,我想尽量避免投射。
这真的是你的代码吗? 'self.routeDirection = routeDirection'这一行没有意义,因为没有名为'routeDirection'的传入参数。在我的机器上,这是一个编译错误:“错误:为自己分配一个属性”。 – matt
@matt可能只是一个错字。 'routeDirection'混合的'routeBound'。 – nathan
这是一个错字。我修好了它。@matt –