gpt4 book ai didi

swift - 为什么代码会产生错误 Type '(int, int)' does not conform to protocol 'IntegerLiteralConvertible'

转载 作者:搜寻专家 更新时间:2023-10-31 22:51:54 26 4
gpt4 key购买 nike

使用下面的代码,我得到“Type '(int, int)' does not conform to protocol 'IntegerLiteralConvertible' instead of missing argument 正如人们所期望的那样。什么是 IntegerLiteralConvertible 以及为什么您认为编译器会产生此错误而不是下面的代码?

我查看了有关此错误的其他 SO 帖子,但没有从中得到任何见解。

func add(x:Int, y:Int) {

}

add(3)

最佳答案

我最好的猜测是它试图将 (3) 元组转换为 (Int, Int) 元组。

事实上,这被编译器接受并按预期工作:

func add(x: Int, y: Int) -> Int {
return x + y
}

let tuple = (4, 7)
add(tuple)

在 playground 中输出 11,这是预期的求和结果。

注意:如果 func 是全局的,没有命名参数,上面的代码就可以工作。如果是实例或类/静态方法,则元组必须包含参数名称:

class MyClass {
class func add(# x: Int, y: Int) -> Int {
return x + y
}
}

let tuple = (x: 3, y: 7)

MyClass.add(tuple) // returns 10

至于IntegerLiteralConvertible,它用于使采用它的类或结构可从文字整数初始化。假设您有一个结构并且您希望能够通过分配一个文字整数来实例化,您可以通过这种方式实现它:

struct MyDataType : IntegerLiteralConvertible {
var value: Int

static func convertFromIntegerLiteral(value: IntegerLiteralType) -> MyDataType {
return MyDataType(value: value)
}

init(value: Int) {
self.value = value
}
}

然后你可以像这样创建一个实例:

let x: MyDataType = 5

关于swift - 为什么代码会产生错误 Type '(int, int)' does not conform to protocol 'IntegerLiteralConvertible',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25583162/

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