Swift:如何在“String”扩展中添加类方法

2024-03-19

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

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(使用前将#替换为@)

Swift:如何在“String”扩展中添加类方法 的相关文章

随机推荐

  • GIT 后接收挂钩未检出子模块

    我一直在开发 Kohana 3 项目 该项目是我不久前使用下载的 zip 文件安装的 我的远程服务器 project git 上有一个 git 存储库 它检查对我测试应用程序的工作目录 public html 的最新提交 我的接收后挂钩文件
  • 同步块——锁定多个对象

    我正在建模一个游戏 其中多个玩家 线程 同时移动 玩家当前所在位置的信息被存储两次 玩家有一个变量 hostField 它引用棋盘上的一个字段 每个字段都有一个 ArrayList 存储当前位于该字段的玩家 我对拥有冗余信息这一事实不太满意
  • min-height:100% 不起作用,因为我也想要它

    我有一个容器 div 包含 3 个 div 一个侧边栏 一个内容和一个标题 而内部的所有元素均按应有的方式呈现 如果这可能会影响我的问题 则它们被定位为 相对 侧边栏和内容使成为min height 100 根据我的需要 包含它们的 div
  • 如何在 Bash 中添加到流之前?

    假设我在 bash 中有以下命令 one two one运行很长时间产生输出流并且two对该流的每一行执行快速操作 但是two除非它读取的第一个值告诉它每行要读取多少个值 否则根本不起作用 one不输出该值 但我提前知道它是什么 假设它是1
  • 检查上传文件的类型

    如何检查使用上传的文件的文件类型FileUploaderASP NET C 网页中的控件 我尝试检查文件扩展名 但当 JPEG 图像 例如Leonardo jpg 被重命名为具有 PDF 的扩展名 例如Leonardo pdf I trie
  • 为什么在函数内部使用 let 声明的某些变量在另一个函数中可用,而其他变量则导致引用错误?

    我不明白为什么变量在函数内声明时表现得如此奇怪 In the first我声明的函数let变量b and c与价值10 b c 10 In the second我显示的功能 b c 这表明 10 10 Also in first我声明的函数
  • 在 C++ 中“stable_sort()ing”STL

    我认为问题标题足够清楚 is is possible to stable sort a std list in C 或者我必须将其转换为 std vector 吗 我问这个问题是因为我尝试了一个简单的示例 它似乎需要 RandomAcces
  • 我怎样才能在android中重复周一、周二和周五的闹钟

    如何在 Android 中仅在周一 周二和周五重复闹钟 Intent myIntent new Intent getApplicationContext x class PendingIntent pendingIntent Pending
  • 如何在类模板之外定义嵌套成员模板?

    考虑以下类模板 template
  • 如何从字典中随机选择一个项目?

    我是一个 python 初学者 试图制作二十一点游戏 并且一直不断收到有关此代码的多个关键错误 def rank rank rank 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 Jack 10 King 10
  • 使用新的 Spring UriComponentsBuilder 进行 URL 编码

    我正在尝试使用 spring 的 UriComponentsBuilder 来生成一些用于 oauth 交互的 url 查询参数包括回调url 带空格的参数值等实体 尝试使用 UriComponentBuilder 因为 UriUtils
  • 如何创建关联矩阵

    我正在尝试创建 1 1 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 S 1
  • 如何将RequiredFieldValidator添加到DropDownList控件?

    我有一个DropDownList与一个绑定SqlDataSource显示数据库中的值 我无法使用RequiredFieldValidator 大多数情况下 您将其视为正在验证任何其他类型的控件 但使用所需字段验证器的 InitialValu
  • 在 Swift 中显示当前位置并更新 MKMapView 中的位置

    我正在学习如何使用新的 Swift 语言 只有 Swift 没有 Objective C 为此 我想用地图做一个简单的视图 MKMapView 我想查找并更新用户的位置 就像在 Apple 地图应用程序中一样 我尝试了这个 但什么也没发生
  • 如何从链接到 QTableView 的模型中插入和删除行

    The removeRows 通过删除选定的行来按预期工作 但有一个问题insertRows 由于某种原因 新项目不会出现在所选索引号处 是什么原因导致这个问题呢 from PyQt4 QtCore import from PyQt4 Qt
  • Matplotlib:如何设置当前图形?

    希望这是一个简单的问题 但我目前无法弄清楚 我想使用 matplotlib 显示 2 个数字 然后交互式地使用它们 我用以下方法创建数字 import matplotlib import pylab as pl f1 pl figure f
  • Heroku 零停机时间

    是否可以做类似的事情Github 零停机部署 https github com blog 517 unicorn在 Heroku 上使用 Cedar 堆栈上的 Unicorn 我不完全确定 Heroku 上的重启是如何进行的 以及我们对重启
  • 从我的本地计算机附加文件以在 cq/AEM 中发送邮件

    我正在学习 AEM 并且正在满足一个要求 其中我能够发送电子邮件 但无法添加从我的计算机浏览的附件 要求 有一个用 HTML 制作的表单 可以从其中收集信息 并且有一个浏览按钮 可以从其中上传文件 文件上传后 应立即将包含表单内容和附件的电
  • 使用 selenium webdriver 按类名和标记名查找元素

    有类和标记名 我正在编写下面的硒代码以从下面的代码中查找描述 但它不起作用 WebElement WWdescription driver findElement By className atb delivery accordions c
  • Swift:如何在“String”扩展中添加类方法

    我想在扩展中添加一个类函数 extension String class func test 我收到错误 Class methods are only allowed within classes use static to declare