引用另一个结构的Swift结构
我正在Xcode操场上测试以下代码引用另一个结构的Swift结构,swift,class,struct,Swift,Class,Struct,我正在Xcode操场上测试以下代码 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.in
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
或mycoordination.latitude
更改坐标,则应同时设置LandmarkA
和LandmarkB
。这种行为适用于类,但我不能在类中使用Codable
,而且设置结构所需的代码更少
第一个示例中的最后两个print语句我希望都是12.1
,并且都是相同的,因为它都引用了相同的对象
这是我唯一无法用structs解决的问题。结构还有我需要的一切,可编码的,结构中的函数,最小的设置代码,等等
我真的更喜欢使用结构,但如果这不可能,我可能会满足于使用类
关于如何实现这一点,你有什么想法吗?你可以通过阅读来完全理解两者之间的区别。你也可以将Codable与class一起使用。@mohammaddadadiq我看到了这个链接,但没有完全理解它。这是否意味着无法对结构执行我想要的操作?我还没有看到任何使用Codable和class的例子或任何东西。有什么链接吗?苹果更喜欢你使用
struct
,但最终,决定权在于开发者根据自己的需要选择最佳的方法。您可以对类使用Codable
,但从Xcode 9 Beta 3开始,类的代码合成器就有缺陷。最后我检查一下,它不能正确处理继承