如何自动命名 class 的实体? Swift 4

How to name entity of class automatically? Swift 4

我有一个 class Shape 和 3 个 class:

Triangle: Shape, Rectangle: Shape, Triangle: Shape

我从输入中读取了一个 String,然后我需要绘制那个形状。

如何在解析字符串时自动命名 classes 的实例?

您可以创建 enum 并使用它在用户输入的大小写之间切换,

像这样,

enum ClassType: String {
    case triangle = "triangle"
    case rectangle = "rectangle"
}

func getClass(with name: String) -> Shape?  {
switch ClassType(rawValue: name.lowercased()){
case .triangle?: print("Triangle")
    return Triangle()
case .rectangle?: print("Recangle")
    return Rectangle()
case .none:
    print("not found")
    return nil
}
}

Test : getClass(with: "Triangle") Result : Triangle

另一种我不太推荐的方法是像这样检查 class 名称描述。

 func drawMyShape(name: String) {
    if name == String(describing: Rectangle.self){
        print("Rect")
    } else if name == String(describing: Triangle.self) {
        print("Triangle")
    }
}
drawMyShape(name: "Rectangle")

假设您有 class Shape 及其子classes

class Shape { 
}

class Triangle: Shape {   
}

class Rectangle: Shape {   
}

然后您可以为 Shape 创建静态方法,其中 returns 某些 Shape 取决于给定的输入

class Shape {

    class func instantiate(name: String) -> Shape? {
        switch name.lowercased() {
        case "triangle":
            return Triangle()
        case "rectangle":
            return Rectangle()
        default:
            return nil
        }
    }

}

用法:

if let triangle = Shape.instantiate(name: someText) as? Triangle {
    // work with triangle
} else if let rectangle = Shape.instantiate(name: someText) as? Rectangle {
    // work with rectangle
}