gpt4 book ai didi

Swift:如何在 'String"扩展中添加类方法

转载 作者:IT王子 更新时间:2023-10-29 05:49:22 35 4
gpt4 key购买 nike

我想在扩展中添加一个类函数:

extension String {
class func test () {
}
}

我收到错误:类方法只允许在类内使用;使用 'static' 声明静态方法

或者我应该如何调用“String.test()

但是对于 NSString

extension NSString {
class func aaa () {
}
}

没有错误。

如果我添加static关键字:

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)'

最佳答案

Classstatic 函数不是在类/结构的实例上调用,而是在类/结构本身上调用,因此您不能只附加一个字符串上课。

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() // 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

关于Swift:如何在 'String"扩展中添加类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30387539/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com