
[英]swift3 append function does not work inside of firebase observeSingleEvent
[英]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)
而且Character
和UnicodeScalar
符合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 !"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.