2016-06-28 21 views
12

Đây là mã của tôi:thông số inout trong nhanh chóng 3

func removeFromString(_ s: inout String, Character c:Character) -> Int { 
    var s1 = s 
    var nRemoved = 0 

    while let ix = s1.characters.index(of: c) { 
     s1.removeSubrange(ix...ix) 
     nRemoved += 1 

    } 
    return nRemoved 
} 

var s2 = "everest" 

let resb = removeFromString(&s2, Character: Character("e")) 

Vấn đề của tôi là thế này là nghĩa vụ phải thay đổi s2 để "vrst" sau khi sử dụng các tham số inouts. Nhưng nó không sửa đổi các var s2 cả. Tôi đang làm gì sai? Hoặc tôi đang mong đợi một đầu ra sai? Làm giúp. Cảm ơn.

Trả lời

15

Bằng cách di chuyển s vào s1 bạn đang tạo bản sao của chuỗi vì Chuỗi là cấu trúc và tất cả các cấu trúc đều được chuyển theo giá trị. Vì vậy, cuối cùng, bạn chỉ thay đổi s1 và không thay đổi trong chuỗi, s. Chỉ cần xóa nó:

func removeFromString(_ s: inout String, Character c:Character) -> Int { 
    var nRemoved = 0 

    while let ix = s.characters.index(of: c) { 
     s.removeSubrange(ix...ix) 
     nRemoved += 1 

    } 
    return nRemoved 
} 
+1

Hoàn hảo. Cảm ơn! :) – Dershowitz123

+5

Đơn giản: 's.remove (at: ix)'. –

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