簡體   English   中英

Swift中的append函數如何工作?

[英]How does append function work in Swift?

有人可以解釋一下這句話有什么問題嗎?

var someString = "Welcome"
someString.append("!")

但是,當我將代碼替換為

var someString = "Welcome"
let exclamationMark : Character = "!"
someString.append(exclamationMark)

提前致謝

在Swift中,沒有字符文字(例如,C語言中的'c' ),只有String文字。

然后,您在String定義了兩個函數: append ,以附加單個字符, extend ,以附加整個String。 所以這有效:

var someString = "Welcome"
someString.extend("!")

如果您確實想使用append ,則可以通過調用Character的構造函數來強制將一個字符的String文字轉換為Character

someString.append(Character("!"))

或使用類型轉換:

someString.append("!" as Character)

或像使用額外變量一樣使用類型注釋:

let exclamationMark: Character = "!"
someString.append(exclamationMark)

String有2個重載的append(_:)

     mutating func append(x: UnicodeScalar)
     mutating func append(c: Character)

而且CharacterUnicodeScalar符合UnicodeScalarLiteralConvertible

enum Character : ExtendedGraphemeClusterLiteralConvertible, Equatable, Hashable, Comparable {

    /// Create an instance initialized to `value`.
    init(unicodeScalarLiteral value: Character)
}

struct UnicodeScalar : UnicodeScalarLiteralConvertible {

    /// Create an instance initialized to `value`.
    init(unicodeScalarLiteral value: UnicodeScalar)
}

"!" 在這種情況下是UnicodeScalarLiteral 因此,編譯器無法確定"!" CharacterUnicodeScalar ,應調用哪個append(_:)方法。 因此,您必須明確指定它。


您會看到: "!" 通過以下代碼可以是UnicodeScalar文字:

struct MyScalar: UnicodeScalarLiteralConvertible {
    init(unicodeScalarLiteral value: UnicodeScalar) {
        println("unicode \(value)")
    }
}

"!" as MyScalar // -> prints "unicode !"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM