2016-10-23 15 views
5

Trong Swift2, bạn có thể có một cái gì đó tương tự như đoạn mã sau:Swift 3, câu lệnh switch, trường hợp hasPrefix

switch productIdentifier { 
    case hasSuffix("q"): 
     return "Quarterly".localized 
    case hasSuffix("m"): 
     return "Monthly".localized 
    default: 
     return "Yearly".localized 
    } 

và nó sẽ làm việc. Trong Swift 3, cách duy nhất tôi có thể làm các công việc trên là:

switch productIdentifier { 
    case let x where x.hasSuffix("q"): 
     return "Quarterly".localized 
    case let x where x.hasSuffix("m"): 
     return "Monthly".localized 
    default: 
     return "Yearly".localized 
    } 

mà dường như mất sự trong sáng của phiên bản Swift2 - và nó làm cho tôi nghĩ rằng tôi thiếu cái gì đó. Ở trên là một phiên bản đơn giản của khóa học. Tôi tò mò nếu có ai có cách xử lý tốt hơn?

+1

tôi không thể làm cho mã Swift 2 của bạn hoạt động trên Swift 2.2.1/Xcode 7.3.1. Bạn có thể vui lòng cho chúng tôi thấy một mã thực sự hoạt động không? – OOPer

+0

Đó là mã làm việc - Tôi lấy trực tiếp từ codebase của mình. Tuy nhiên một số thứ như phần mở rộng trên Strings cho bản địa hoá sẽ không làm việc cho bạn bởi vì bạn không có phần mở rộng đó. – AlexK

+0

Sẽ tốt hơn nếu bạn có thể hiển thị các phần bị thiếu. Bạn thật may mắn khi bạn có thể nhận được câu trả lời đúng trong một khoảng thời gian ngắn, việc thiếu thông tin đó sẽ dẫn đến những câu trả lời có chất lượng thấp. – OOPer

Trả lời

5

Tôi không biết nếu điều này là bất kỳ tốt hơn so với sử dụng ràng buộc như trong ví dụ của bạn có giá trị, nhưng bạn chỉ có thể sử dụng một dấu gạch dưới thay vào đó,

switch productIdentifier { 
case _ where productIdentifier.hasSuffix("q"): 
    return "Quarterly".localized 
case _ where productIdentifier.hasSuffix("m"): 
    return "Monthly".localized 
default: 
    return "Yearly".localized 
+0

Đánh giá cao điều đó. Tôi chỉ cảm thấy sai khi nhắc lại tên biến trên mỗi trường hợp. – AlexK

3

Bạn dường như chỉ đang kiểm tra ký tự cuối cùng của productIdentifier. Bạn có thể làm theo cách này:

switch productIdentifier.characters.last { 
case "q"?: 
    return "Quarterly".localized 
case "m"?: 
    return "Monthly".localized 
default: 
    return "Yearly".localized 
} 
+1

Đây là giải pháp tốt hơn cho vấn đề cụ thể này, tuy nhiên, +1 – Alexander

+3

Không phải là phổ dụng. – Alexander

+0

@AlexanderMomchliov, đã đồng ý. Cá nhân tôi không nghĩ rằng cú pháp Swift 3 là không rõ ràng, nhưng tôi sẽ sử dụng giải pháp này nếu tôi chỉ kiểm tra ký tự cuối cùng. – vacawama

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