Swift:如何在’String’扩展中添加类方法
发布时间:2020-12-14 05:39:18 所属栏目:百科 来源:网络整理
导读:我想在扩展中添加一个类函数: extension String { class func test () { }} 我得到错误:类方法只允许在类中;使用’static’来声明静态方法 或者我该如何调用“String.test()” 但是对于NSString extension NSString { class func aaa () { }} 没有错误. 如
我想在扩展中添加一个类函数:
extension String { class func test () { } } 我得到错误:类方法只允许在类中;使用’static’来声明静态方法 或者我该如何调用“String.test()” 但是对于NSString extension NSString { class func aaa () { } } 没有错误. 如果我添加静态关键字: extension String { static func aaa () { self.stringByAppendingString("Hello") } } 得到:表达式解析为未使用的函数, 那么我应该如何添加一个类函数也想使用self.方法. 编辑:这有效! 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)'
类和结构的实例上不调用类和静态函数,而是在类/结构本身上调用,因此不能只是将字符串附加到类.
Apple Documentation:
但是,您可以使用mutating关键字将字符串附加到String的变量实例: extension String { mutating func aaa() { self += "hello" } } let foo = "a" foo.aaa() // 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |