#swift
#swift
Вопрос:
Я новичок в Xcode и Swift. Ниже приведена моя формула для ипотечного калькулятора. Он работает правильно на игровой площадке, но когда я переношу его на вкладку ViewController, именно тогда Xcode выдает мне кучу ошибок. Может кто-нибудь, пожалуйста, помочь?
let r: Double = interestRate / 1200
let n: Double = years * 12
let p: Double = pow(1 r, n)
let monthPay = loan * r * p / (p - 1)
print(monthPay)
Итак, на мой взгляд, контроллер
ValueA — это сумма кредита
, ValueB — количество платежей
, valueC — процентная ставка
под ним у вас будет кнопка «Рассчитать», которая выведет результаты внизу в ярлыке с текущим именем «Результаты». Возможно, когда я переименовываю все в значения, возникают проблемы.
Код ViewController
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var valueA: UITextField!
@IBOutlet weak var valueB: UITextField!
@IBOutlet weak var valueC: UITextField!
@IBOutlet weak var results: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func button(_ sender: Any) {
let a = Int(valueA.text!)
let b = Int(valueB.text!)
let c = Int(valueC.text!)
let answer = a! * c! * pow(1 c!, b!) / (pow(1 c!, b!))
results.text = "$(answer)"
}
}
Ответ №1:
Ваша проблема заключается в том, что вы преобразуете значения текстового поля в целые числа и пытаетесь умножить их на результат метода pow, который возвращает Double . Обратите внимание, что если пользователь введет неверное значение, ваше приложение завершит работу, если вы принудительно развернете результат. Вы можете использовать оператор объединения nil ??
для предоставления значения по умолчанию .zero
в случае сбоя. Попробуйте вот так:
class ViewController: UIViewController {
@IBOutlet weak var valueA: UITextField! // loan amount
@IBOutlet weak var valueB: UITextField! // Number of Payments
@IBOutlet weak var valueC: UITextField! // Interest Rate
@IBOutlet weak var results: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func button(_ sender: Any) {
let loanAmount = Double(valueA.text!) ?? .zero
let numberOfPayments = Double(valueB.text!) ?? .zero
let interestRate = Double(valueC.text!) ?? .zero
let rate = interestRate / 100 / 12
let answer = loanAmount * rate / (1 - pow(1 rate, -numberOfPayments))
results.text = Formatter.currency.string(for: answer)
}
}
extension Formatter {
static let currency: NumberFormatter = {
let formatter = NumberFormatter()
formatter.locale = .init(identifier: "en_US_POSIX")
formatter.numberStyle = .currency
return formatter
}()
}
Комментарии:
1. Спасибо! Будет ли это также под кнопкой IBAction func? пусть r: Double = проценты / 1200 пусть n: Double = годы * 12 пусть Pow: Double = pow (1 r, n) Я также предполагаю, что для меня это будет пусть c: Double = процентная ставка / 1200 пусть b: Double = годы * 12 пусть Pow: Double = pow(1 c, b)
2. @DylanWilliams при написании кода в Swift вы всегда должны называть свои переменные описательными именами. Избегайте, насколько это возможно, таких имен, как a, b, c, если вы не называете координаты, такие как x, y
3. r будет формулой процентной ставки для помощи с ипотекой, n будет формулой платежа, p будет функцией Pow
4. Я бы предположил, что это не лучший способ работы с формулой ипотеки в swift
5. Лично я бы просто использовал
0
вместо.zero
.