追加函数如何在Swift中工作?

时间:2015-02-13 09:00:00

标签: ios string swift append

有人可以解释一下这句话有什么问题。

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

然而,当我用,

替换代码时,这是有效的
var someString = "Welcome"
let exclamationMark : Character = "!"
someString.append(exclamationMark)

提前致谢

2 个答案:

答案 0 :(得分:5)

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

然后,您在String上定义了两个函数:append,附加单个字符,extend附加整个字符串。所以这有效:

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

如果您真的想使用append,可以通过调用String'强制将一个字符Character文字转换为Character。构造函数:

someString.append(Character("!"))

或使用类型转换:

someString.append("!" as Character)

或使用类型注释,就像使用额外变量一样:

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

答案 1 :(得分:0)

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。因此,编译器无法确定"!"Character还是UnicodeScalar,以及应该调用哪个append(_:)方法。这就是你必须明确指定它的原因。


您可以看到:"!"可以是此代码的UnicodeScalar文字:

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

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