Swift结构引用另一个结构

时间:2017-07-22 18:49:54

标签: swift class struct

我在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.latitudeMyCoordinate.latitude更改坐标,则应同时设置LandmarkALandmarkB。这种行为适用于类,但我不能在类中使用Codable,并且设置结构所需的代码较少。

第一个例子中的最后两个印刷语句我希望都是12.1,因为它们都引用同一个对象。

这是我唯一能用结构来解决的问题。结构包含我需要的一切,可编码,结构中的函数,最小的设置代码等。

我真的更喜欢使用结构但如果这不可能,我可能会选择使用类。

有关如何实现这一目标的任何想法?

0 个答案:

没有答案