Как назвать сущность класса автоматически?Swift 4 - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть класс Shape и 3 класса:

Triangle: Shape, Rectangle: Shape, Triangle: Shape

Я читаю String из ввода, и после этого мне нужно нарисовать эту форму.

Как яможно автоматически называть экземпляры классов, когда я разбираю строку?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Предположим, у вас есть класс Shape и его подклассы

class Shape { 
}

class Triangle: Shape {   
}

class Rectangle: Shape {   
}

, затем вы можете создать статический метод для Shape, который возвращает определенное значение 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
}
0 голосов
/ 18 февраля 2019

Вы можете создать 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
}
}

Тест : getClass(with: "Triangle") Результат : Треугольник

Другой способ, но я не очень рекомендую, это проверить описание имени класса, как это.

 func drawMyShape(name: String) {
    if name == String(describing: Rectangle.self){
        print("Rect")
    } else if name == String(describing: Triangle.self) {
        print("Triangle")
    }
}
drawMyShape(name: "Rectangle")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...