加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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:

Within the body of a type method,the implicit self property refers to
the type itself,rather than an instance of that type.

但是,您可以使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读