我已自定义类型:
std::cin
我想将其传输到普通的String数组,然后再传输回去。例如,对于:
open class HashTag: Equatable {
open var text: String
open var isRemovable: Bool
open var hasHashSymbol: Bool
open var configuration: HashtagConfiguration?
public init(word: String, withHashSymbol: Bool = true, isRemovable: Bool = true) {
self.text = word
self.isRemovable = isRemovable
self.hasHashSymbol = withHashSymbol
if hasHashSymbol {
self.text = "#" + text
}
}
public static func == (lhs: HashTag, rhs: HashTag) -> Bool {
return lhs.text == rhs.text
}
}
我想转移到
var tags = [
HashTag(word: "this"),
HashTag(word: "is"),
HashTag(word: "an"),
HashTag(word: "example")
]
然后回传:
var tagsTransferred = ["this","is","an","example"]
收件人:
var tagsTransferred = ["this","is","an","example"]
答案 0 :(得分:1)
map
中的Array
方法用于转换数组的每个元素,即您正在执行的操作。
要将[String]
转换为[HashTag]
:
let hashTagArray = stringArray.map { HashTag(word: $0) }
要将[HashTag]
转换为[String]
:
let stringArray = hashTagArray.map { $0.text }
此外,如果您希望这样的事情成为可能:
// the string array literal is automatically converted to [HashTag]
let hashTagArray: [HashTag] = ["this", "is", "an", "example"]
您可以这样做:
open class HashTag : Equatable, ExpressibleByStringLiteral {
...
public typealias StringLiteralType = String
public required convenience init(stringLiteral value: String) {
self.init(word: value)
}
}
答案 1 :(得分:1)
两种情况下都可以使用compactMap
函数。
从[HashTag]到[String]
var tags = [
HashTag(word: "this"),
HashTag(word: "is"),
HashTag(word: "an"),
HashTag(word: "example")
]
let arrString = tags.compactMap { (tag) -> String in
tag.text.removeFirst() // This line just to remove "#"
return tag.text
}
从[String]到[HashTag]
var strings = ["this", "is", "an", "example"]
let arrHashtag = strings.compactMap {
return HashTag(word: $0)
}