如何自动命名 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
}
我有一个 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
}