当前位置: 首页 > 面试题库 >

Swift中的localizeWithFormat和可变参数

马宜民
2023-03-14
问题内容

我正在尝试创建一个字符串扩展来做类似的事情

"My name is %@. I am %d years old".localizeWithFormat("John", 30)

看起来像这样

extension String {
  func localizeWithFormat(arguments: CVarArgType...) -> String {
    return String.localizedStringWithFormat(
      NSLocalizedString(self,
        comment: ""), getVaList(arguments))
  }
}

它给我以下编译错误

类型CVaListPointer不符合协议CVargType

有人知道如何解决此编译错误吗?


问题答案:

这应该非常简单,只需更改您的参数,如下所示:

extension String {
    func localizeWithFormat(name:String,age:Int, comment:String = "") -> String {
        return String.localizedStringWithFormat( NSLocalizedString(self, comment: comment), name, age)
    }
}

"My name is %@. I am %d years old".localizeWithFormat("John", age: 30)  // "My name is John. I am 30 years old"

初始化(格式:语言环境:参数:)

extension String {
    func localizeWithFormat(args: CVarArgType...) -> String {
        return String(format: self, locale: nil, arguments: args)
    }
    func localizeWithFormat(local:NSLocale?, args: CVarArgType...) -> String {
        return String(format: self, locale: local, arguments: args)
    }
}
let myTest1 = "My name is %@. I am %d years old".localizeWithFormat(NSLocale.currentLocale(), args: "John",30)
let myTest2 = "My name is %@. I am %d years old".localizeWithFormat("John",30)


 类似资料:
  • 本文向大家介绍Swift中的可变参数函数介绍,包括了Swift中的可变参数函数介绍的使用技巧和注意事项,需要的朋友参考一下 可变参数函数指的是可以接受任意多个参数的函数,我们最熟悉的可能就是 NSString 的 -stringWithFormat:方法了。在 Objective-C 中,我们使用这个方法生成字符串的写法是这样的: 这个方法中的参数是可以任意变化的,参数的第一项是需要格式化的字符串

  • 问题内容: 如何在不创建其他变量的情况下处理此错误? 我不想创建其他变量只是为了存储x的值。有可能做我想做的事吗? 问题答案: 如其他答案所述,从Swift 3开始,将var放在不推荐使用的变量之前。尽管没有在其他答案中说明,但是可以声明参数。思考:传递一个指针。 这在递归中特别有用。 苹果的声明指南可以在这里找到。

  • 问题内容: Swift中的函数是否可以具有参数?我正在尝试这样做: …但是当我尝试调用它并通过时,它给了我一个奇怪的编译错误: 我不明白为什么我的类已经被声明为可选的,所以必须遵循某些特殊的协议。 问题答案: 它不会编译,因为该函数需要引用,但是您通过了。这个问题与可选无关。 通过用声明参数意味着您将在函数体内为其分配一些值。如何分配价值? 你需要这样称呼它 如果您了解C ,则这是代码的C 版本,

  • 问题内容: 我指的是Apple的Swift编程指南,以了解如何用Swift语言创建可变/不可变对象(数组,字典,集合,数据)。但是我不明白如何在Swift中创建一个不可变的集合。 我希望在Objective-C中看到以下Swift中的等效项 不变数组 可变数组 不变字典 可变字典 问题答案: 创建不可变数组 第一种方式: 第二种方式: 创建可变数组 将对象追加到数组 辞典 创建不可变字典 创建可变

  • 在Swift编程语言中,它说: 函数也可以接受可变数目的参数,将它们收集到数组中。 当我用逗号分隔的数字列表(`sumof(1,2,3,4)调用这样一个函数时,它们在函数中作为一个数组可用。 问题:如果我已经有一个数组要传递给这个函数,该怎么办? 这将失败,并出现编译器错误,“无法找到接受所提供参数的'__conversion'的重载”。有没有办法把一个现有的数组变成一个我可以传递给一个变量函数的

  • 5.7. 可变参数 参数数量可变的函数称为为可变参数函数。典型的例子就是fmt.Printf和类似函数。Printf首先接收一个的必备参数,之后接收任意个数的后续参数。 在声明可变参数函数时,需要在参数列表的最后一个参数类型之前加上省略符号“...”,这表示该函数会接收任意数量的该类型参数。 gopl.io/ch5/sum func sum(vals...int) int { total