Tôi không biết, cho dù đây là ý tưởng thực sự đằng sau nó, nhưng có một cái nhìn lịch sử về nó:
Lúc đầu, một bản sao mảng cư xử bằng cách tham khảo, khi bạn đã thay đổi một mục trong đó. Nó hoạt động theo giá trị, khi bạn thay đổi độ dài của mảng. Họ đã làm nó vì lý do hiệu suất (ít bản sao mảng). Nhưng tất nhiên, eh, làm thế nào tôi có thể diễn tả một cách lịch sự, eh, khó với Swift, eh, hãy gọi nó là "không quan tâm đến một cấu trúc tốt nếu bạn có thể giành được một số hiệu suất, bạn có lẽ không bao giờ cần" cách tiếp cận . Một số được gọi là copy-on-write, những gì không thông minh hơn nhiều, bởi vì COW là minh bạch, trong khi hành vi đó không minh bạch. Từ điển Swift điển hình: Sử dụng một từ thông dụng, sử dụng nó theo cách, nó phù hợp với Swift, không quan tâm đến tính chính xác.
Sau đó trên các mảng hoàn chỉnh bằng hành vi sao chép, điều ít gây nhầm lẫn hơn. Rõ ràng trong khái niệm của Swift, khả năng đọc có nghĩa là "ít ký tự hơn", nhưng không có nghĩa là "dễ hiểu hơn". Từ điển Swift điển hình: Sử dụng một từ thông dụng, sử dụng nó theo cách, nó phù hợp với Swift, Tôi đã đề cập đến điều đó chưa?)
Vì vậy, tôi đoán nó vẫn là hiệu suất cộng với hành vi dễ hiểu có thể dẫn đến hiệu suất kém hơn. (Bạn sẽ biết rõ hơn khi một bản sao là cần thiết trong mã của bạn và bạn vẫn có thể làm điều đó và bạn nhận được một hoạt động 0 từ Cocoa, nếu mảng nguồn là không thay đổi.) Tất nhiên, họ có thể nói: "Được rồi, bởi giá trị là một sai lầm, chúng tôi đã thay đổi điều đó. " Nhưng họ sẽ không bao giờ nói.
Tuy nhiên, hiện tại các mảng trong Swift hoạt động nhất quán. Một tiến bộ lớn trong Swift! Có lẽ bạn có thể gọi nó là ngôn ngữ lập trình vào một ngày nắng.
Tôi chưa bao giờ bị mắc kẹt trong đó nguồn chính của vấn đề. Tuy nhiên, bản sao của mảng đó sâu bao nhiêu? Và tại sao nó là "nguồn chính của vấn đề", khi mảng thay đổi, nhưng không có "nguồn chính của vấn đề", khi một mục trong mảng đó thay đổi một trong các thuộc tính của nó? Và tại sao họ nghĩ tại nhóm Swift rằng sự thay đổi của một mục không phải là "nguồn chính của vấn đề" trong khi thay đổi độ dài của mảng là "nguồn chính của vấn đề" trong một thời gian dài và tại sao họ lại thay đổi ý kiến của họ? –
Tôi đồng ý với bạn chủ yếu, nhưng tôi đoán, trong Obj-C đó là trách nhiệm của nhà phát triển không phải để vượt qua/yêu cầu đối tượng có thể thay đổi miễn là không có lựa chọn nào khác. các đối tượng không thể thay đổi không thể được sửa đổi sau lưng của người gọi, do đó, từ góc độ này, logic của bạn trông giống như một sự phá vỡ đối với tôi. – holex
Điểm logic của tôi đơn giản là "sửa đổi sau lưng tôi" không gây ra các vấn đề nghiêm trọng trong thực tế. Đây là một trong những tính năng "chúng tôi giải quyết vấn đề chỉ tồn tại về mặt lý thuyết" của Swift. Bạn có vấn đề đó trong mã sản xuất chỉ một lần? Vì vậy, ngay từ đầu đã có một giải pháp nhanh chóng và bẩn (không nhất quán) cho một vấn đề không có và bây giờ chúng tôi có một giải pháp nhất quán cho một vấn đề không làm cho đôi khi khó khăn hơn và sẽ có một bản in hiệu suất. –