溫馨提示×

Swift協(xié)議怎樣實現(xiàn)多態(tài)

小樊
82
2024-10-31 06:05:49
欄目: 編程語言

在Swift中,協(xié)議本身并不直接支持多態(tài),但可以通過泛型和工廠模式來實現(xiàn)類似多態(tài)的效果。以下是一個示例:

首先,定義一個協(xié)議Shape

protocol Shape {
    func area() -> Double
}

然后,為不同的形狀類型實現(xiàn)這個協(xié)議:

struct Circle: Shape {
    let radius: Double
    
    func area() -> Double {
        return Double.pi * radius * radius
    }
}

struct Rectangle: Shape {
    let width: Double
    let height: Double
    
    func area() -> Double {
        return width * height
    }
}

接下來,創(chuàng)建一個工廠類ShapeFactory,用于生成不同形狀的實例:

class ShapeFactory {
    static func createShape(type: String) -> Shape {
        switch type {
        case "circle":
            return Circle(radius: 1.0)
        case "rectangle":
            return Rectangle(width: 2.0, height: 3.0)
        default:
            fatalError("Unknown shape type")
        }
    }
}

現(xiàn)在,你可以使用ShapeFactory來創(chuàng)建不同類型的形狀,并通過協(xié)議Shape調(diào)用它們的area()方法,從而實現(xiàn)類似多態(tài)的效果:

let circle = ShapeFactory.createShape(type: "circle")
print("Circle area: \(circle.area())")

let rectangle = ShapeFactory.createShape(type: "rectangle")
print("Rectangle area: \(rectangle.area())")

輸出結(jié)果:

Circle area: 3.141592653589793
Rectangle area: 6.0

通過這種方式,你可以在Swift中實現(xiàn)類似多態(tài)的功能。

0