2014-06-20 23 views
7

trong Objective-C làm việc này tốtLàm cách nào để so sánh Enum nhanh chóng?

enter image description here

Không thể biên dịch này trong Swift

enter image description here

Hoặc

enter image description here

ALAuthorizationStatus định nghĩa trong IOS SDK

enum ALAuthorizationStatus : Int { 
    case NotDetermined // User has not yet made a choice with regards to this application 
    case Restricted // This application is not authorized to access photo data. 
    // The user cannot change this application’s status, possibly due to active restrictions 
    // such as parental controls being in place. 
    case Denied // User has explicitly denied this application access to photos data. 
    case Authorized // User has authorized this application to access photos data. 
} 
+1

Vui lòng cho chúng tôi biết định nghĩa enum của bạn. – Alexander

+1

AssetsLibrary từ iOS SDK – Charlie

Trả lời

3

Toán tử so sánh == trả về Bool, không Boolean. Các biên dịch sau:

func isAuthorized() -> Bool { 
    let status = ALAssetsLibrary.authorizationStatus() 
    return status == ALAuthorizationStatus.Authorized 
} 

(. Cá nhân, tôi thấy các thông báo lỗi từ trình biên dịch Swift đôi khi khó hiểu Trong trường hợp này, vấn đề không phải là lập luận của ==, nhưng kiểu trả về không chính xác.)


Trên thực tế, sau đây cũng nên biên dịch do tự động suy luận kiểu:

func isAuthorized() -> Bool { 
    let status = ALAssetsLibrary.authorizationStatus() 
    return status == .Authorized 
} 

Nhưng nó không có lỗi biên dịch "Không tìm thấy thành viên 'ủy quyền'", trừ khi bạn chỉ định rõ kiểu dữ liệu của biến status:

func isAuthorized() -> Bool { 
    let status:ALAuthorizationStatus = ALAssetsLibrary.authorizationStatus() 
    return status == .Authorized 
} 

Đây có thể là một lỗi trong Swift hiện tại trình biên dịch (được thử nghiệm với Xcode 6 beta 1).

Cập nhật: Phiên bản đầu tiên hiện được biên dịch bằng Xcode 6.1.

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