繁体   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