Missnig argument labels 'operator,firstNumber,seondNumber'in call 에러 발생
구글링, 네이버 검색했지만 답을 찾을 수 없어서 팀원들한테 도움요청!!!
바로 해결! 역시 팀원님들 짱짱!!
이걸 계기로 함수 선언 및 함수호출에대해 다시한번 공부함!!
기초부터..튼튼히!!
🔧아래는 수정된 코드
let 함수에서 calculate() ()내부에 Argument Lavel없이 사용하기 위해서는 함수선언시 Argument Lavel앞에 _를 사용해서 생략해서 사용해야 했음!!!
그것이 아니라면 일일히 Argument Lavel라벨을 기록해서 해야했는데... 값만 기록했으니 계속 오류가 발생했던것!!!
class Calculator {
func calculate(_ operator: Character, _ firstNumber: Double, _ secondNumber: Double) -> Double {
switch `operator`{
case "+":
return firstNumber + secondNumber
case "-":
return firstNumber - secondNumber
case "*":
return firstNumber * secondNumber
case "/":
return firstNumber / secondNumber
default:
return 0
}
}
}
let calculator = Calculator()
let addResult = calculator.calculate("+", 6, 3)
let subResult = calculator.calculate("-", 6, 3)
let multiplyResult = calculator.calculate("*", 6, 3)
let dividedResult = calculator.calculate("5", 6, 3)
class Calculator {
func calculate(_ operator: Character, _ firstNumber: Double, _ secondNumber: Double) -> Double {
switch `operator`{
case "+":
return firstNumber + secondNumber
case "-":
return firstNumber - secondNumber
case "*":
return firstNumber * secondNumber
case "/":
return firstNumber / secondNumber
case "%":
return firstNumber.truncatingRemainder(dividingBy: secondNumber)
default:
return 0
}
}
}
class AddOperation {
func operate(firstNumber:Double, secondNumber: Double) -> Double {
return Double(firstNumber + secondNumber)
}
}
class SubtractOperation {
func operate(firstNumber: Double, secondNumber: Double) -> Double {
return Double(firstNumber - secondNumber)
}
}
class MultiplyOPeration {
func operate(firstNumber: Double, secondNumber: Double) -> Double {
return Double(firstNumber * secondNumber)
}
}
class DiviedeOperation {
func operate(firstNumber: Double, secondNumber: Double) -> Double {
return Double(firstNumber / secondNumber)
}
}
let calculator = Calculator()
let addResult = calculator.calculate("+", 6, 3)
let subResult = calculator.calculate("-", 6, 3)
let multiplyResult = calculator.calculate("*", 6, 3)
let dividedResult = calculator.calculate("/", 6, 3)
let remainderResult = calculator.calculate("%", 5, 3)
print("addResult : \(addResult)")
print("subResult : \(subResult)")
print("multiplyResult : \(multiplyResult)")
print("divideResult : \(dividedResult)")
print("remainderResult: \(remainderResult)")
나머지 구하는 연산에서 나머지 연산자 사용이 안되서 잠시 당황했지만
firstNumber, secondNumber을 Double로 해두어서 Int에서만 사용가능한 나머지 연산자가 사용이 안 되었던것!!
truncatingRemainder 메서드 사용해서 해결
메서드는 해당 객체 또는 타입에 대해 호출 됩니다!
myObject.increment()
와 같이 객체 또는 타입 인스턴스 뒤에 메서드 이름을 호출합니다!
와 뿌듯... 이제 문제가 생겨도 찾아보고 해결할 수 있다니... 왕뿌듯...
아무것도 아니지만 왕뿌듯....왕초보니까 그러려니 해주세요
//계산기 만들기
//연산자 입력시 첫번째 숫자와 두번째 숫자의 연산을 진행하도록 함수를 구성함
class Calculator {
func calculate(_ operator: Character, _ firstNumber: Double, _ secondNumber: Double) -> Double {
switch `operator`{
case "+":
return firstNumber + secondNumber
case "-":
return firstNumber - secondNumber
case "*":
return firstNumber * secondNumber
case "/":
return firstNumber / secondNumber
case "%":
return firstNumber.truncatingRemainder(dividingBy: secondNumber)
default:
return 0
}
}
}
class AddOperation {
func operate(firstNumber:Double, secondNumber: Double) -> Double {
return Double(firstNumber + secondNumber)
}
}
class SubtractOperation {
func operate(firstNumber: Double, secondNumber: Double) -> Double {
return Double(firstNumber - secondNumber)
}
}
class MultiplyOPeration {
func operate(firstNumber: Double, secondNumber: Double) -> Double {
return Double(firstNumber * secondNumber)
}
}
class DiviedeOperation {
func operate(firstNumber: Double, secondNumber: Double) -> Double {
return Double(firstNumber / secondNumber)
}
}
let calculator = Calculator()
let addResult = calculator.calculate("+", 6, 3)
let subResult = calculator.calculate("-", 6, 3)
let multiplyResult = calculator.calculate("*", 6, 3)
let dividedResult = calculator.calculate("/", 6, 3)
let remainderResult = calculator.calculate("%", 5, 3)
print("addResult : \(addResult)")
print("subResult : \(subResult)")
print("multiplyResult : \(multiplyResult)")
print("divideResult : \(dividedResult)")
print("remainderResult: \(remainderResult)")
이 부분 해결을 위해 무엇을 해야 할 지 고민하는 시간.......
++ 정확한 oprator가 전달되지 않을시 0을 리턴해야 함.. 이 메소드도 추가해야함!!!
웬걸...틀린 부분이 바로 발견됨..
1. 0으로 나눴을 때 값이 나오지 않게 하는 부분!
(생각보다 오류가 많이 뜬다고 한다!!)
2. 알 수 없는 연산자 입력시 0으로 출력되게 하는 부분!
추가로 연습하면서 Argument Lavel생략해서 작성했던 부분을 다시 추가해서 작성했다. 추후에 Lv3~4 단계를 하면서 수정해 나갈예정이다!
🔧 아래는 수정된 코드
class Calculator {
func calculate(operator: Character, firstNumber: Double, secondNumber: Double) -> Double{
switch `operator`{
case "+":
return firstNumber + secondNumber
case "-":
return firstNumber - secondNumber
case "*":
return firstNumber * secondNumber
case "/":
if secondNumber != 0{
return firstNumber / secondNumber
}else { print ("Error : Division by zero")
return 0
}
default: print("Error : Uknown operator")
return 0
}
}
}
let calculator = Calculator()
let addResult = calculator.calculate(operator: "+", firstNumber: 6, secondNumber: 3)
let subResult = calculator.calculate(operator: "-", firstNumber: 6, secondNumber: 3)
let multiplyResult = calculator.calculate(operator: "*", firstNumber: 6, secondNumber: 3)
let dividedResult = calculator.calculate(operator: "/", firstNumber: 6, secondNumber: 3)
print("addResult : \(addResult)")
print("subResult : \(subResult)")
print("multplyResult : \(multiplyResult)")
print("dividedResult : \(dividedResult)")