кортежи создают хаос, сравнивая их - PullRequest
0 голосов
/ 02 июня 2019

Учитывая приведенный ниже код дает мне ошибки. Я не знаю почему. Все, что я пытаюсь сделать, сравнить два кортежа.

Я пытаюсь выучить Свифт.

Код:

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

Ответы [ 3 ]

1 голос
/ 02 июня 2019

Это не потому, что вы сравниваете два кортежа, это потому, что вы добавляете 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);
}

Это работает.

0 голосов
/ 02 июня 2019

Здесь есть два варианта оператора +.

Первый - это оператор сложения типа (Int, Int) -> Int. Это тот, который будет вызван, если вы сделаете 2 + 2, чтобы получить 4

Второй является оператором строки типа (String, String) -> String. Это тот, который будет вызван, если вы сделаете "2" + "2", чтобы получить "22".

Вы пытаетесь смешивать и сопоставлять, что вы не можете сделать, потому что нет варианта +, который имеет тип (String, Int) -> String или (Int, String) -> String.

Чтобы это работало, сначала нужно явно преобразовать все целые числа в строки:

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);
}

Более того, вообще не используйте конкатенацию строк в таком случае, просто используйте интерполяцию строк, которая автоматически преобразует любой тип в его строковое представление:

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));
}
0 голосов
/ 02 июня 2019

Вы не можете добавить Ints к Strings, как говорится в сообщении об ошибке.Используйте строковую интерполяцию для ваших операторов печати, например:

print("True \(a.0) \(a.1)")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...