Swift 中的字符串解释



>我有一个看起来像这样的结构:

struct colorShapeSize{
let color: String!
let shape: String!
let size: UIImage!
}

我有一个看起来像这样的字符串:

"color:{Blue}shape:{round}size:{medium}"

所有字符串将采用相同的格式(即颜色始终排在第一位,形状排在第二位,大小排在第三位(。

如何从字符串中提取数据并将其放入colorShapeSize结构中?

这个怎么样?

struct ColorShapeSize {
let color: String
let shape: String
let size: String
init(rawValue: String) {
var dictionary: [String: String] = [:]
var sorted = rawValue.components(separatedBy: "}").filter({ return $0.components(separatedBy: ":{").count == 2 })
for s in sorted {
let kv = s.components(separatedBy: ":{")
let key = kv[0]
let value = kv[1]
dictionary[key] = value
}
color = dictionary["color"] ?? ""
shape = dictionary["shape"] ?? ""
size = dictionary["size"] ?? ""
}
}
let str = "color:{Blue}shape:{round}size:{medium}"
let css = ColorShapeSize(rawValue: str)
print(css.color, css.shape, css.size)

试试这个,它会提取数组中的字符串,然后你可以用值做你想做的事

func test() {
let givenString = "color:{Blue}shape:{round}size:{medium}"
var results = [String]()
do {
let regex = try NSRegularExpression(pattern: "\{(.*?)\}", options: [])
let tempString = givenString as NSString
regex.enumerateMatches(in: givenString, options: [], range: NSMakeRange(0, givenString.characters.count), using: { (result, flag, stop) in
if let range = result?.rangeAt(1) {
let number = tempString.substring(with: range)
results.append(number)
}
})
print(results) //["Blue", "round", "medium"] (Here you can initialize your struct with the values)
}
catch(let error) {
print("Unable to extract string : (error.localizedDescription)")
}
}

最新更新