到目前为止,我一直在使用rawValue根据案例获取文本,如下例所示:
enum Level1: String {
case question1 = "q1"
case question2 = "q2"
case question3 = "q3"
}
print(Level1.question1.rawValue)
但现在我想得到答案。我试图使它与相关的值一起工作,但我不知道如何将值分配给属性,或者即使它是可能的。例如:questionText =“q1”,answerText =“a1”。
enum Level2 {
case question1(questionText: String, answerText: String);
case question2(questionText: String, answerText: String);
case question3(questionText: String, answerText: String);
}
答案 0 :(得分:2)
具有关联值的枚举不能是字符串的类型。但他们可以实施例如CustomStringConvertible协议:
enum ScreenName: CustomStringConvertible {
case Category(categoryId: String, categoryName: String)
...
var description: String {
switch (self) {
case let .Category(_, categoryName):
return "Category - \(categoryName)"
...
}
}
}
然后,您可以致电ScreenName.Category(categoryId: "1", categoryName: "products").description
,然后您将获得"Category - products"
答案 1 :(得分:1)
您可以通过以下方式使用包含关联值的枚举:
enum Level2 {
case question1(questionText: String, answerText: String)
case question2(questionText: String, answerText: String)
case question3(questionText: String, answerText: String)
}
// initialise
let level = Level2.question2(questionText: "Question", answerText: "Answer")
// read
switch level {
case .question1(let question, let answer):
print(question + answer)
case .question2(let question, let answer):
print("something")
case .question3(let question, let answer):
print("something else")
}
我建议您在此处阅读更多内容:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html
P.S:如果你真的需要在你的情况下使用枚举而不是结构,我建议重新考虑。 使用结构的一个例子是:struct Level {
let question: String
let answer: String
}
let levels = [Level]()
但这是另一个话题。我希望我已经回答了你的问题。
答案 2 :(得分:0)
关联值与RawRepresentable
(您的第一个枚举)不同,因为它的值是在运行时分配的,并且每次使用都可能不同。基本上,具有相关值的枚举不适合您的需要。
试试这个:
struct Challenge {
let question: String
let answer: String?
}
struct Level1 {
static let challenge1 = Challenge(question: "q1", answer: nil)
static let challenge2 = Challenge(question: "q2", answer: nil)
static let challenge3 = Challenge(question: "q3", answer: nil)
}
struct Level2 {
static let challenge1 = Challenge(question: "q1", answer: "a1")
static let challenge2 = Challenge(question: "q2", answer: "a3")
static let challenge3 = Challenge(question: "q3", answer: "a3")
}
稍后你可以回复它们:
let currentChallenge = Level1.challenge2
答案 3 :(得分:-2)
我想我找到了我想要的答案。我将在下面发布我将要使用的代码应用于所使用的示例。谢谢你的回答。
$prod = function($a, $b) {
return $a["retail_price"] - $b["retail_price"];
}
usort($products, $prod);