将自定义类型转换为字符串

时间:2020-03-12 16:56:51

标签: ios swift casting

我已自定义类型:

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"]

2 个答案:

答案 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函数。

  1. 从[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
    }
    
  2. 从[String]到[HashTag]

    var strings = ["this", "is", "an", "example"]
    
    let arrHashtag = strings.compactMap {
        return HashTag(word: $0)
    }