2015-06-04 16 views
5

Tôi đã làm việc trên một hướng dẫn Swift và thấy rằng Swift có một cách lạ để xử lý câu lệnh đa dòng.Tuyên bố đa dòng trong Swift

Trước tiên, tôi xác định một số phần mở rộng của String lớp tiêu chuẩn:

extension String { 
    func replace(target: String, withString: String) -> String { 
     return self.stringByReplacingOccurrencesOfString(target, withString: withString) 
    } 

    func toLowercase() -> String { 
     return self.lowercaseString 
    } 
} 

này làm việc như mong đợi:

let str = "HELLO WORLD" 
let s1 = str.lowercaseString.replace("hello", withString: "goodbye") // -> goodbye world 

này không hoạt động:

let s2 = str 
      .lowercaseString 
      .replace("hello", withString: "goodbye") 
// Error: could not find member 'lowercaseString' 

Nếu tôi thay thế tham chiếu đến thuộc tính lowercaseString bằng một cuộc gọi hàm, nó hoạt động trở lại :

let s3 = str 
      .toLowercase() 
      .replace("hello", withString: "goodbye") // -> goodbye world 

Có bất kỳ thông số nào trong ngôn ngữ Swift ngăn chặn thuộc tính bị phá vỡ trên dòng riêng của nó không?

Mã số tại Swift Stub.

Trả lời

4

Đây chắc chắn là lỗi trình biên dịch. Vấn đề đã được giải quyết trong Xcode 7 beta 3.

0

Sử dụng dấu chấm phẩy không bắt buộc phải nhanh chóng. Và tôi nghĩ rằng các vấn đề với các câu lệnh multiline nhanh chóng là do các dấu chấm phẩy tùy chọn.

Lưu ý rằng swift không hỗ trợ chuỗi nhiều dòng. Kiểm tra tại đây: Swift - Split string over multiple lines

Vì vậy, có thể nhanh chóng không thể xử lý các câu lệnh nhiều dòng. Tôi không chắc chắn về điều này và điều này có thể là một trong những lý do vì vậy tôi sẽ đánh giá cao nếu có ai khác có thể giúp đỡ về vấn đề này.

2

Điều này giống như lỗi trình biên dịch, nhưng nó liên quan đến thực tế là bạn có thể xác định tiền tố, infix và toán tử postfix trong Swift (nhưng không phải toán tử., Trớ trêu thay đủ). Tôi không biết tại sao nó chỉ mang lại cho bạn nỗi đau về tài sản và không phải là cuộc gọi chức năng, nhưng là sự kết hợp của hai điều:

  • khoảng trắng trước và sau. (dấu chấm) toán tử cho các thuộc tính (chỉ)
  • một số sắc thái của ngôn ngữ ngày càng phát triển này xử lý các thuộc tính khác với các cuộc gọi hàm (mặc dù các hàm được cho là loại lớp đầu tiên).

Tôi sẽ gửi một lỗi để xem những gì xuất phát từ nó, Swift không phải là do theo cách này. Điều đó nói rằng, để làm việc xung quanh nó, bạn có thể không phá vỡ các tài sản từ các loại, hoặc bạn có thể thêm một khoảng trắng trước và sau ..

let s2 = str.lowercaseString 
    .replace("hello", withString: "goodbye") 

let s3 = str 
    . lowercaseString 
    .replace("hello", withString: "goodbye")