我在Xcode Playground中测试以下代码。
struct Coordinate: Codable {
var latitude: Double
var longitude: Double
}
struct Landmark: Codable {
var name: String
var foundingYear: Int
var location: Coordinate
}
var MyCoordinate: Coordinate = Coordinate.init(latitude: 30.1, longitude: 10.2)
var LandmarkA: Landmark = Landmark.init(name: "My Landmark", foundingYear: 2017, location: MyCoordinate)
var LandmarkB: Landmark = Landmark.init(name: "My Landmark 2", foundingYear: 2016, location: MyCoordinate)
LandmarkA.location.latitude = 12.1
print (LandmarkA.location.latitude) // 12.1
print (LandmarkB.location.latitude) // 30.1
现在,如果我将此代码转换为类而不是结构。
class Coordinate {
var latitude: Double
var longitude: Double
init(latitude: Double, longitude: Double) {
self.latitude = latitude
self.longitude = longitude
}
}
class Landmark {
var name: String
var foundingYear: Int
var location: Coordinate
init(name: String, foundingYear: Int, location: Coordinate) {
self.name = name
self.foundingYear = foundingYear
self.location = location
}
}
var MyCoordinate: Coordinate = Coordinate.init(latitude: 30.1, longitude: 10.2)
var LandmarkA: Landmark = Landmark.init(name: "My Landmark", foundingYear: 2017, location: MyCoordinate)
var LandmarkB: Landmark = Landmark.init(name: "My Landmark 2", foundingYear: 2016, location: MyCoordinate)
LandmarkA.location.latitude = 12.1
print (LandmarkA.location.latitude) // 12.1
print (LandmarkB.location.latitude) // 12.1
是否有可能使结构的行为与类相同的方式相同?如果我通过LandmarkA.location.latitude
或MyCoordinate.latitude
更改坐标,则应同时设置LandmarkA
和LandmarkB
。这种行为适用于类,但我不能在类中使用Codable
,并且设置结构所需的代码较少。
第一个例子中的最后两个印刷语句我希望都是12.1
,因为它们都引用同一个对象。
这是我唯一能用结构来解决的问题。结构包含我需要的一切,可编码,结构中的函数,最小的设置代码等。
我真的更喜欢使用结构但如果这不可能,我可能会选择使用类。
有关如何实现这一目标的任何想法?