我到处寻找,但我没有看到任何特定于我想要实现的东西,尤其是iOS / swift。我想从我在我的应用程序中调用的XML解析器请求中创建年龄类别。
必须从xml数据中的标记调用年龄信息:
<item>
<description>ANTHONY JOHNSON, Age: 17 From: PEORIA, IL</description></item>
我已经打电话来完整地获取描述标签:
func parser(_ parser: XMLParser, didEndElement elementName: String,
namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "description" {
self.person.desc = self.foundCharacters; }
if elementName == "item" {
tempData.desc = self.person.desc; }
项目类:
class Item {
var desc = "";
}
我只需要从年龄值开始制作类别。我计划将它们与enum一起使用:
enum ageCategories: String {
case ageUnder10 = "Age 10 and under"
case age10Plus = "Age 10-15"
case age15Plus = "Age 15+"
}
我的问题是:
OR
答案 0 :(得分:1)
您的问题归结为在描述字符串中查找年龄。以下显示了使用Scanner
的一种解决方案。此代码假定年龄将是文本“年龄:”之后的数字。
let desc = "ANTHONY JOHNSON, Age: 17 From: PEORIA, IL"
var ageRange: ageCategories? = nil
let scanner = Scanner(string: desc)
if scanner.scanUpTo("Age:", into: nil) && scanner.scanString("Age:", into: nil) {
var age = 0
if scanner.scanInt(&age) {
switch age {
case 0..<10:
ageRange = .AgeUnder10
case 10..<15:
ageRange = .Age10Plus
case 15...:
ageRange = .Age15Plus
default:
break
}
}
}
if let ageRange = ageRange {
print("Found age range of \(ageRange)")
} else {
print("No valid age found")
}
调整case
语句中的范围以符合您的实际需要。您为枚举值指定的字符串不明确。 10应该是.AgeUnder10
还是.Age10Plus
?
FYI - 枚举值应以小写字母开头,枚举名称应以大写字母开头。所以你的枚举应该是:
enum AgeCategories: String {
case ageUnder10 = "Age under 10"
case age10Plus = "Age 10-14"
case age15Plus = "Age 15+"
}