我想在扩展中添加一个类函数:
extension String {
class func test () {
}
}
我收到错误:Class methods are only allowed within classes; use 'static' to declare a static method
或者我应该怎么称呼“String.test()
"
But for NSString
extension NSString {
class func aaa () {
}
}
没有错误。
如果我添加static关键词:
extension String {
static func aaa () {
self.stringByAppendingString("Hello")
}
}
Got: Expression resolves to an unused function
,
那么我应该如何添加一个类函数也想使用self.
method.
EDIT:这有效!
extension String {
static func aaa (path:String) -> String {
return path.stringByAppendingString("Hello")
}
}
但关于@lan的回答:
mutating func bbb(path: String) {
self += "world"
}
当我输入时,它看起来像这样:
String.bbb(&<#String#>)
String.bbb(&"nihao")
Cannot invoke 'bbb' with an argument list of type '(String)'
Class
and static
函数不是在类/结构的实例上调用,而是在类/结构本身上调用,因此不能只将字符串附加到类中。
苹果文档 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Methods.html:
在类型方法体内,隐式 self 属性指的是
类型本身,而不是该类型的实例。
但是,您可以将字符串附加到 a 的变量实例String
使用mutating
关键词:
extension String {
mutating func aaa() {
self += "hello"
}
}
let foo = "a"
foo.aaa() // ERROR: Immutable value of type 'String' only has mutating members named 'aaa'
var bar = "b"
bar.aaa() // "bhello"
如果您尝试使用指向字符串的指针作为参数,则可以使用inout
关键字来改变输入的字符串:
extension String {
static func aaa(inout path: String) {
path += "Hello"
}
}
var foo = "someText"
String.aaa(&foo)
foo //someTextHello
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)