我如何在Swift中子类化结构?

Ole*_*ndr 10 xcode ios swift

struct MyRect : CGRect {...}
Run Code Online (Sandbox Code Playgroud)

是否有可能在swift中继承一个Structure?

我已经在Apple官方网站上找到了一个例子:这个例子扩展了CGRect结构以包含计算区域属性:

extension CGRect {
    var area: CGFloat {
        return width * height
    }
}
let rect = CGRect(x: 0.0, y: 0.0, width: 10.0, height: 50.0)
let area = rect.area
Run Code Online (Sandbox Code Playgroud)

我如何定义结构的子类?

Sam*_*low 24

struct在Swift中不可能子类化,只有类可以被子类化.An extension不是子类,它只是在现有的基础上添加了附加功能struct,这与Objective-C中的类别相当.

请在这里看到苹果斯威夫特文档阅读有关之间的差异structclass.

https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-ID82


bso*_*sod 8

您无法在 Swift 中对结构进行子类化,但在某种意义上,您可以通过创建一个简单地提供您希望子类化的结构的结构来模拟子类化。例如,如果您想要子类化Calendar(结构),则可以创建一个返回配置的日历的结构。

struct WorldCalendar {
    let american1: Calendar = {
        var c = Calendar(identifier: .gregorian)
        c.timeZone = .current
        c.locale = Locale(identifier: "en_US_POSIX")
        return c
    }()
    
    static let american2: Calendar = {
        var c = Calendar(identifier: .gregorian)
        c.timeZone = .current
        c.locale = Locale(identifier: "en_US_POSIX")
        return c
    }()
    
    static func getAmerican() -> Calendar {
        var c = Calendar(identifier: .gregorian)
        c.timeZone = .current
        c.locale = Locale(identifier: "en_US_POSIX")
        return c
    }
}

let worldCalendar = WorldCalendar()
let cal1 = worldCalendar.american1

let cal2 = WorldCalendar.american2

let cal3 = WorldCalendar.getAmerican()
Run Code Online (Sandbox Code Playgroud)

如何提供配置的结构(作为实例属性、静态属性、静态函数等)只是一个更适合您的应用程序的问题,坦率地说,是个人偏好的问题。