2014-06-15 28 views
7

Vì vậy, im rất mới để làm cho quảng cáo APP Swift, im cố gắng thực hiện một số đầu vào rất đơn giản trong trường văn bản, lấy giá trị và sử dụng chúng làm Int cho một số tính toán.Chuyển đổi chuỗi trường nhập thành Int trong Swift

Nhưng một cái gì đó không được làm việc đúng với 'var khoảng cách'

 var handicapTal:Int 
     var MagicNumber:Int 
     var handicap = inputHCP.text.toInt() 
     var distance = inputDistance.text.toInt() 

     if (handicap >= 0 && handicap <= 20) 
     { 
      handicapTal = 30 
     } 
     else if(handicap > 20 && handicap <= 40){ 
      handicapTal = 10 
     } 

     MagicNumber = distance - handicapTal 

của dòng cuối cùng của mã mà đưa ra một lỗi. Nó nói lỗi nghiêm trọng: Không thể tháo rời Tùy chọn.None

Trả lời

9

khoảng cách, trong ví dụ của bạn, là Int? nếu không được gọi là Int tùy chọn. .toInt() trả về Int? vì có thể chuyển đổi từ Chuỗi thành Int thành không thành công. Xem ví dụ sau:

Welcome to Swift! Type :help for assistance. 
    1> let a = "12" 
a: String = "12" 
    2> let b = a.toInt() 
b: Int? = 12 
    3> let c = "Hello" 
c: String = "Hello" 
    4> let d = c.toInt() 
d: Int? = nil 
    5> if let e = a.toInt() { println("e = \(e)") } 
e = 12 
    6> if let f = c.toInt() { println("Huh?") } 
    7> 
+0

Nhưng làm cách nào tôi có thể sử dụng Int? gõ để làm nhiều tính toán hơn với? Tôi có thể làm ví dụ của bạn là 'let g = b + b? –

+0

@RasmusBidstrup Có, bạn có thể. – NobodyNada

+0

@Rasmum, nếu nil == b {// xử lý lỗi} else {let g = b! + b! } – Kaydell

1

Tôi đã tìm thấy vấn đề của bạn! Đầu tiên bạn nên khởi tạo handicapTal. Bạn có thể làm điều đó với: var handicaptal: Int!. Khi bạn đặt ! đằng sau nó sẽ được đặt thành 0. Hoặc chỉ cần đặt nó là 0. var handicaptal: Int = 0 Tôi đã thử mã này và nó chạy mà không có lỗi!

+0

Tôi tin rằng thay vì sử dụng loại Int! Không bắt buộc, có thể là không, thì tốt hơn là kiểm tra nil và sử dụng toán tử unwrap như nil == handicapTal rồi {// handle error} {// sử dụng handicapTal! trong biểu thức} – Kaydell

+0

Bạn cũng có thể làm điều đó, nhưng tôi không thấy lý do nào cho downvote .... – Bas

+0

lý do bỏ phiếu xuống là nếu bạn sử dụng một tùy chọn không được khai báo hoàn toàn như Int! và có một lỗi trong toInt() biến sẽ nhận được giá trị của nil. Nếu bạn không kiểm tra nil, thì chương trình sẽ sụp đổ khi toInt() trả về nil. Bạn đã kiểm tra mã của bạn với một cái gì đó như "ABC". ToInt() mà sẽ trở lại nil và có thể sụp đổ toàn bộ chương trình nếu bạn sử dụng kết quả mà không kiểm tra nếu nó là nil. – Kaydell

Các vấn đề liên quan