鉴于以下代码给了我错误。我不知道为什么我正在尝试比较两个元组。
我正在尝试学习Swift。
代码:
var a = (7, "Prannay");
var b = (9, "Bothra");
if (a > b){
print("True \n" + a.0 + " " + a.1);
} else {
print("False \n" + b.0 + " " + b.1);
}
Swift version 4.2.1 (swift-4.2.1-RELEASE)
swiftc -o main main.swift
main.swift:4:19: error: binary operator '+' cannot be applied to operands of type 'String' and 'Int'
print("True \n" + a.0 + " " + a.1);
~~~~~~~~~ ^ ~~~
main.swift:4:19: note: overloads for '+' exist with these partially matching parameter lists: (Int, Int), (String, String)
print("True \n" + a.0 + " " + a.1);
^
main.swift:6:20: error: binary operator '+' cannot be applied to operands of type 'String' and 'Int'
print("False \n" + b.0 + " " + b.1);
~~~~~~~~~~ ^ ~~~
main.swift:6:20: note: overloads for '+' exist with these partially matching parameter lists: (Int, Int), (String, String)
print("False \n" + b.0 + " " + b.1);
^
compiler exit status 1
答案 0 :(得分:1)
不是因为您比较了两个元组,而是因为您将Int
与String
相加,并将代码更改为:
var a = (7, "Prannay");
var b = (9, "Bothra");
if (a > b){
print("True \n" + "\(a.0)" + " " + a.1);
} else {
print("False \n" + "\(b.0)" + " " + b.1);
}
有效。
答案 1 :(得分:0)
您不能如错误消息所述将Ints添加到字符串。对您的打印语句使用字符串插值,如下所示:
print("True \(a.0) \(a.1)")
答案 2 :(得分:0)
这里有+
运算符的两种变体。
第一个是类型(Int, Int) -> Int
的加法运算符。如果您执行2 + 2
会导致4
第二个是类型(String, String) -> String
的字符串连接运算符。如果您执行"2" + "2"
会导致"22"
,那么就会被调用。
您正在尝试混合匹配,因为没有+
类型为(String, Int) -> String
或(Int, String) -> String
的{{1}}变体,所以您无法做到这一点。
要使其工作,必须首先将所有整数显式转换为Strings:
let a = (7, "Prannay");
let b = (9, "Bothra");
if a > b {
print("True \n" + String(a.0) + " " + a.1);
} else {
print("False \n" + String(b.0) + " " + b.1);
}
更好的是,在这种情况下根本不使用String串联,而只是使用String插值,它会自动将任何类型转换为它的字符串表示形式:
let a = (7, "Prannay");
let b = (9, "Bothra");
if a > b {
print("True \n\(a.0) \(a.1));
} else {
print("False \n\(b.0) \(b.1));
}