Vấn đề ở đây là tuyên bố được đưa ra đúng là đúng, vì Swift được nhập mạnh và không ép buộc ngầm. Chỉ cần có một trường hợp tương tự bản thân mình với "toán tử nhị phân" - 'không thể được áp dụng cho các toán hạng kiểu' Ngày 'và' Int '".
Nếu bạn viết:
var result = 10 * 0.2
... đó là tốt, nhưng nếu bạn viết:
var number = 10
var result = number * 0.2
... đó không phải là tốt. Điều này là do các giá trị rõ ràng không được phân loại có một kiểu thích hợp được trình biên dịch chọn, vì vậy trên thực tế dòng đầu tiên được lấy là var result = Double(10) * Double(0.2)
. Sau khi tất cả, như một con người bạn có thể có nghĩa là 10 được nổi-điểm hoặc một số nguyên - bạn thường sẽ không nói đó và mong đợi rằng để được rõ ràng từ bối cảnh. Nó có thể hơi đau, nhưng ý tưởng về các loại mạnh là sau khi mã được phân tích cú pháp, nó chỉ có thể có một biểu thức biên dịch hợp lệ.
Nói chung, bạn sẽ xây dựng một giá trị mới bằng cách sử dụng hàm tạo, vì vậy, var result = Double(textfield) * VAT
trong trường hợp của bạn. Điều này khác với việc đúc (textfield as Double
) vì Int không phải là một lớp con của Double; những gì bạn đang làm thay vào đó là yêu cầu một giá trị Double hoàn toàn mới được xây dựng trong thời gian chạy, mất một số độ chính xác nếu giá trị rất cao hoặc thấp. Đây là những ngôn ngữ được đánh máy lỏng lẻo làm ngầm với khá nhiều giá trị ngay lập tức, với chi phí thời gian nhỏ nhưng đáng kể.
Trong trường hợp cụ thể của bạn, nó không có giá trị để có một Int ở nơi đầu tiên (ngay cả khi không có phần nào phần là có thể) vì vậy những gì bạn cần là:
func taxesFree(number: Int) -> Double {
var textfield = Double(self.inputTextField.text)!
let VAT = 0.2
var result = textfield * VAT
return result
}
Nguồn
2016-11-27 17:47:24
thể trùng lặp của [không thể được áp dụng cho toán hạng của loại 'UITextField' và 'Int'] (http://stackoverflow.com/questions/29880051/không thể được áp dụng-to-operands-of-type-uitextfield-and-int) – nhgrif