Ios 用Swift中的字符串将类指定给变量

Ios 用Swift中的字符串将类指定给变量,ios,swift,class,Ios,Swift,Class,我正试图在swift中解决一些Euler项目的问题。 我最初尝试使用操场,但发现速度非常慢,所以我制作了一个简单的单视图应用程序,在模拟器中为我运行它们。请参见下面的示例: 我这样做的方式是创建一个名为ProblemClass的客户类,然后为从该类继承的每个问题创建一个新类。之后,我所要做的就是重写ProblemClass中的函数,然后视图控制器只加载从ProblemClass继承的Problem1类中的所有信息 当它切换到从Problem1(或任何其他问题)加载的视图时,它通过在切换过程中设

我正试图在swift中解决一些Euler项目的问题。 我最初尝试使用操场,但发现速度非常慢,所以我制作了一个简单的单视图应用程序,在模拟器中为我运行它们。请参见下面的示例:

我这样做的方式是创建一个名为
ProblemClass
的客户类,然后为从该类继承的每个问题创建一个新类。之后,我所要做的就是重写
ProblemClass
中的函数,然后视图控制器只加载从
ProblemClass
继承的
Problem1
类中的所有信息

当它切换到从
Problem1
(或任何其他问题)加载的视图时,它通过在切换过程中设置
currentProblem
变量来获取详细信息。见下文

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let destination = segue.destination as! ProblemVC
    let cell = sender as! ProblemsTVCell
    let label = cell.label!

    switch label.text! {
    case "Problem 1":
        destination.currentProblem = Problem1()
    case "Problem 2":
        destination.currentProblem = Problem2()
    case "Problem 3":
        destination.currentProblem = Problem3()
    case "Problem 4":
        destination.currentProblem = Problem4()
    default:
        break
    }
}
有没有办法用一个字符串来指定问题#(),这样我就不必做上百个这样的例子了?我不知道它会是什么样子,尝试在谷歌上搜索时不断返回关于#选择器的答案。我不知道它到底是什么样子,但在我的脑海里,我是这样想的

destination.currentProblem = Class(name: "Problem4")
如果我问的不清楚,请告诉我,我会尽力更好地解释。 提前谢谢你

---编辑--- 从下面选择的答案中添加我的解决方案

因此,我将prepare函数更改为:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let destination = segue.destination as! ProblemVC
    let cell = sender as! ProblemsTVCell
    let label = cell.label!

    let problemName = label.text!.replacingOccurrences(of: " ", with: "")

    let problemClass = NSClassFromString("Project_Euler.\(problemName)")! as! ProblemClass.Type
    destination.currentProblem = problemClass.init()
}
为了在我的
ProblemClass
中获得
init()
,我将我的类设置为:

class ProblemClass {

required init() {
    return
}

func title() -> String {
    return "Title"
}

func problem() -> String {
    return "Problem #"
}

func question() -> [String] {

    return ["No Question Yet"]
}

func answer() -> [String] {

    return ["No Answer Code Entered Yet"]
}
}
也许:

let problemNumber: Int = 1
var className = "AppName.Problem\(problemNumber)"
let problemClass = NSClassFromString(className) as! Problem.Type
destination.currentProblem = problemClass

我想你给我的东西我就快到了。问题是我的
ProblemClass
没有继承任何东西,所以它没有init(),我不知道如何在不继承的情况下创建一个。但我基本上需要在其中添加一个步骤,就像这样
destination.currentProblem=problemClass.init()
,或者至少这是我从您发送的第一个链接中得到的。@JasonBrady解决方案应该添加到答案中(不是问题)