Я изучаю swift и пытаюсь построить калькулятор. Я пытаюсь создать функцию квадратного корня. Я уже создал умножение, добавление, вычитание и деление и функцию с именем performOperation с двумя удвоениями. Я знаю, что в Swift я могу создать еще одну функцию под названием performOperation с одним двойным номером, а swift достаточно умен, чтобы использовать правильную функцию для функции квадратного корня, но я получаю ошибку во второй строке func performOperation, которая говорит «метод« выполнить операцию »с objective-c селектор конфликтует с предыдущим объявлением с тем же objective-c селектором." Что я делаю неправильно?Swift не дал мне 2 селектора с тем же именем
код ниже:
import UIKit
class ViewController: UIViewController
{
@IBOutlet weak var display: UILabel!
var userIsTyping = false
@IBAction func appendDigit(sender: UIButton) {
let digit = sender.currentTitle!
if userIsTyping {
display.text = display.text! + digit
} else {
display.text = digit
userIsTyping = true
}
}
@IBAction func operate(sender: UIButton) {
let operation = sender.currentTitle!
if userIsTyping {
enter()
}
switch operation {
case "×": performOperation { $0 * $1 }
case "÷": performOperation { $1/$0 }
case "+": performOperation { $0 * $1 }
case "−": performOperation { $1 - $0 }
case "√": performOperation { sqrt($0) }
default: break
}
}
func performOperation(operation: (Double, Double) -> Double) {
if operandStack.count >= 2 {
displayValue = operation(operandStack.removeLast(), operandStack.removeLast())
enter()
}
}
func performOperation(operation: Double -> Double) {
if operandStack.count >= 1 {
displayValue = operation(operandStack.removeLast())
enter()
}
}
var operandStack = Array<Double>()
@IBAction func enter() {
userIsTyping = false
operandStack.append(displayValue)
println("operandStack = \(operandStack)")
}
//Changes String Value to a Double
var displayValue: Double {
get {
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
}
set {
display.text = "\(newValue)"
userIsTyping = false
}
}
}
yah Конечно, я не позволю вам или даже другому языку не позволять такой вещи использовать одно и то же имя для двух разных вещей. complier будет путать, если он позволяет вызвать какую функцию где. –
@FattiKhan: Неправда. Многие языки поддерживают перегрузку функций, где у вас есть функции с тем же именем, которые дифференцируются по сигнатуре аргумента. Я считаю, что Свифт тоже. – Thilo
@Thilo http://stackoverflow.com/questions/29457720/compiler-error-method-with-objective-c-selector-conflicts-with-previous-declara –