cảnh báo: 'ký tự' không được dùng nữa: Vui lòng sử dụng trực tiếp Chuỗi hoặc Chuỗi con


162

các ký tự - một thuộc tính thể hiện của Chuỗi, không được dùng nữa với Xcode 9.1

Rất hữu ích để có được một chuỗi con từ String bằng cách sử dụng thuộc characterstính nhưng bây giờ nó đã bị phản đối và Xcode gợi ý sử dụng substring. Tôi đã cố gắng kiểm tra xung quanh các câu hỏi SO và hướng dẫn / hướng dẫn dành cho nhà phát triển apple. Nhưng không thể thấy bất kỳ giải pháp / thay thế như đề xuất.

Đây là thông điệp cảnh báo:

'ký tự' không được dùng nữa: Vui lòng sử dụng Chuỗi hoặc Chuỗi con

nhập mô tả hình ảnh ở đây

Tôi đã thực hiện rất nhiều thao tác chuỗi được thực hiện / xử lý bằng thuộc tính characters.

Bất cứ ai có bất kỳ ý tưởng / thông tin về bản cập nhật này?


5
Dưới đây là một bài viết thú vị về các Stringthay đổi từ Swift 3 đến 4 và vui lòng đọc thêm SE0163
vadian

5
cố gắng sử dụng countthay thế.
holex

1
Nếu bạn đang sử dụng string.characters.forEachAPI mới làstring.forEach { char in process(char) }
Efren

Câu trả lời:


270

Swift 4 đã giới thiệu các thay đổi trên API chuỗi.
Bạn chỉ có thể sử dụng !stringValue.isEmptythay vìstringValue.characters.count > 0

để biết thêm thông tin bạn lấy mẫu từ đây

ví dụ

let edit = "Summary"
edit.count   // 7

Cảm ơn câu trả lời của bạn .. Nhưng tôi có thể có tài liệu tham khảo chi tiết về chuỗi phụ. Đây chỉ là ví dụ mẫu, tôi đã thực hiện rất nhiều thao tác khác liên quan đến các nhân vật
Krunal

1
Vui lòng kiểm tra thông tin chi tiết từ đây. developer.apple.com/l
Library / content / documentation / Swift / từ

hãy chào = "Xin chào, thế giới!" hãy để index = hello.index (của: ",") ?? chúc
mừng.end Index

1
Tài liệu tham khảo trực tuyến cho chuỗi con .
Dennis Vennink

32
Không bao giờ sử dụng đếm> 0 để kiểm tra xem bộ sưu tập có trống không. Có một thuộc tính trên Bộ sưu tập được gọi là isEmpty chính xác cho điều đó. Từ các tài liệu Khi bạn cần kiểm tra xem bộ sưu tập của mình có trống không, hãy sử dụng thuộc tính isEmpty thay vì kiểm tra xem thuộc tính đếm có bằng không. Đối với các bộ sưu tập không tuân thủ RandomAccessCollection, truy cập thuộc tính đếm lặp qua các phần tử của bộ sưu tập.
Leo Dabus

82

Ví dụ Swift 4 vs Swift 3:

let myString = "test"

for char in myString.characters {print(char) } // Swift 3
for char in myString { print(char) } // Swift 4

let length = myString.characters.count // Swift 3
let length = myString.count // Swift 4

2
Đây phải là câu trả lời được chấp nhận. Câu hỏi là về sự thay thế cho string.char character.count, không phải là sự thay thế để so sánh với zero; điều đó chỉ được đề cập trong ảnh chụp màn hình.
Timothy Kanski

9

Một trong những trường hợp phổ biến nhất để thao tác các chuỗi là với các phản hồi JSON. Trong ví dụ này, tôi đã tạo một tiện ích mở rộng trong ứng dụng đồng hồ của mình để loại bỏ (n) ký tự cuối cùng của đối tượng Bitcoin JSON.

Swift 3:

func dropLast(_ n: Int = 0) -> String {
    return String(characters.dropLast(n))

Thông báo lỗi Xcode 9.1:

'ký tự' không được dùng nữa: Vui lòng sử dụng trực tiếp Chuỗi hoặc Chuỗi con

Xcode đang bảo chúng ta sử dụng biến chuỗi hoặc phương thức trực tiếp .

Swift 4:

func dropLast(_ n: Int = 0) -> String {
    return String(dropLast(n))
    }

Gia hạn hoàn chỉnh:

extension String {
    func dropLast(_ n: Int = 0) -> String {
        return String(dropLast(n))
    }

    var dropLast: String {
        return dropLast()
    }
}

Gọi:

print("rate:\(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: \(literalMarketPrice)")

Bảng điều khiển:

//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal

Ví dụ khác:

  • print("Spell has \(invisibleSpellName.count) characters.")
  • return String(dropLast(n))
  • return String(removeLast(n))

Tài liệu:

Bạn thường sẽ sử dụng các phương pháp thông thường như dropLast()hay removeLast()hay countvì vậy đây là tài liệu của Apple rõ ràng cho từng phương pháp.

giọt nước ()

gỡ bỏ ()

đếm nhân vật


2

Cảnh báo đó chỉ là một đỉnh của tảng băng trôi, có một loạt các thay đổi chuỗi, chuỗi lại là một tập hợp các ký tự, nhưng chúng tôi đã nhận được rất nhiều điều mới mẻ và thú vị, subStrings :)

Đây là một bài đọc tuyệt vời về điều này: https://useyourloaf.com/blog/updating-strings-for-swift-4/


2

Sử dụng điều này charactersStringđã dừng là một bộ sưu tập trong Swift 2.0. Tuy nhiên đây vẫn là mã hợp lệ trong Swift 4 nhưng bây giờ không còn cần thiết nữa mà Stringlà một Collectionlần nữa.

Ví dụ: Swift 4 Stringhiện có thuộc tính đếm trực tiếp cung cấp số đếm ký tự:

// Swift 4
let spString = "Stack"
spString.count           // 5

Ví dụ cho String và SubString.

Chuỗi

Swift 4 Stringbây giờ trực tiếp nhận Element mang ký tự đầu tiên của String:(string.characters.first)

let spString = "Stack"
let firstElement = spString.first   //S

SubString

Sử dụng SubString có được ký tự đầu tiên.

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W

Tôi muốn có được ký tự đầu tiên của chuỗi vì vậy tôi muốn biết rằng tôi nên sử dụng cách nào để let FirstEuity = spString.first hoặc Sub chuỗi?
Pulkit

1
@Pulkit Sử dụng tốt hơn .firstvì nếu chuỗi ""trống. nó sẽ chỉ trả về nil nhưng substringsẽ tạo ra lỗi.
Pranavan Sp

cách chuyển đổi dòng mã này sang swift 4 'AuthorImageText = String (val.char character [(AuthorName.startIndex)]). viết hoa'
Pulkit

@Pulkit chỉ cần xóa .charactersđủ
Pranavan Sp

0

Bạn cũng có thể sử dụng mã này để nhóm từ điển mà không cần sử dụng {$ 0.char character.first! }.

let cities = ["Shanghai": 24_256_800, "Karachi": 23_500_000, "Beijing": 21_516_000, "Seoul": 9_995_000]
let groupedCities = Dictionary(grouping: cities.keys) { $0.first! }
print(groupedCities)

0

Chỉ cần xóa các ký tự Ví dụ:

stringValue.char character.count đến stringValue.count

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.