2014-06-06 13 views

Trả lời

14

var i = users[0]["Age"] as Int

Như GoZoner chỉ ra, nếu bạn không biết rằng yếu hèn sẽ thành công, sử dụng:

var i = users[0]["Age"] as? Int

Kết quả sẽ là nil nếu nó không thành công

+0

đôi khi nó trả về nil.Tôi đã sử dụng phương pháp này để phân tích cú pháp từ 'WKBridge' –

5

Nếu bạn chắc chắn kết quả là Int rồi sử dụng:

var i = users[0]["Age"] as Int 

nhưng nếu bạn không chắc chắn và muốn có một giá trị nil nếu nó không phải là một Int sau đó sử dụng:

var i = users[0]["Age"] as? Int 

“Sử dụng các hình thức bắt buộc của người điều khiển loại dàn diễn viên khi bạn đang không (như?) chắc chắn nếu downcast sẽ thành công. Biểu mẫu của toán tử này sẽ luôn trả về giá trị tùy chọn và giá trị sẽ là 0 nếu không thể thực hiện downcast . Điều này cho phép bạn kiểm tra cho một thành công yếu hèn.”

Trích Từ: Apple Inc.‘Ngôn ngữ lập trình Swift’iBooks.. https://itun.es/us/jEUH0.l

+1

Cần lưu ý rằng kiểu' i' trong ví dụ đầu tiên là 'Int' nhưng kiểu' i' trong ví dụ thứ hai sẽ là 'Int?'. – Ephemera

+0

Phải. Tôi nghĩ rằng Apple có thể nghĩ về 'như Int' và' như Int? 'Thay vì giới thiệu 'như?' – GoZoner

+0

Đó là một điểm tốt thực sự. Tôi cho rằng 'as?' Tương đương với '-isKindOfClass:', nhưng việc di chuyển '?' Sẽ có ý nghĩa. – Ephemera

-1

Điều này có thể đã làm việc trước đó, nhưng nó không phải là câu trả lời cho Swift 3. Chỉ cần làm rõ, tôi không có câu trả lời cho Swift 3, dưới đây là thử nghiệm của tôi bằng cách sử dụng câu trả lời ở trên, và rõ ràng nó không hoạt động.

Dữ liệu của tôi xuất phát từ một NSDictionary

print("subvalue[multi] = \(subvalue["multi"]!)") 
print("as Int = \(subvalue["multi"]! as? Int)") 
if let multiString = subvalue["multi"] as? String { 
    print("as String = \(multiString)") 
    print("as Int = \(Int(multiString)!)") 
} 

Kết quả tạo ra là:

subvalue[multi] = 1 
as Int = nil 

Chỉ cần đánh vần nó ra:
a) Giá trị ban đầu là loại Bất kỳ? và giá trị là: 1
b) đúc để int kết quả trong nil
c) Đúc kết quả String trong nil (các dòng in không bao giờ thực hiện)

EDIT
Câu trả lời là sử dụng NSNumber
cho num = subvalue ["multi"] thành? NSNumber

Sau đó, chúng ta có thể chuyển đổi số thành một số nguyên
let Myint = num.intValue

+0

Có thể vấn đề là bạn đang sử dụng 'NSDictionary' thay vì' Dictionary'? 'như? Int' nên làm việc tốt trong Swift 3. –

+0

Thực ra, vâng, đó chắc chắn là vấn đề. Các giá trị 'NSDictionary' là' AnyObject', không thể chuyển thành 'Int' vì nó không phải là một kiểu đối tượng. Sử dụng từ điển Swift thay vào đó và nó sẽ hoạt động. –

1

Swift 4 câu trả lời:

if let str = users[0]["Age"] as? String, let i = Int(str) { 
    // do what you want with i 
} 
Các vấn đề liên quan