Chuyển đổi Int thành Chuỗi trong Swift


554

Tôi đang cố gắng tìm ra cách chuyển Intthành một Stringtrong Swift.

Tôi tìm ra cách giải quyết, sử dụng NSNumbernhưng tôi muốn tìm ra cách thực hiện tất cả trong Swift.

let x : Int = 45
let xNSNumber = x as NSNumber
let xString : String = xNSNumber.stringValue

Câu trả lời:


961

Chuyển đổi Intsang String:

let x : Int = 42
var myString = String(x)

Và cách khác - chuyển đổi Stringthành Int:

let myString : String = "42"
let x: Int? = myString.toInt()

if (x != nil) {
    // Successfully converted String to Int
}

Hoặc nếu bạn đang sử dụng Swift 2 hoặc 3:

let x: Int? = Int(myString)

2
Trong khi điều này hoạt động, sử dụng toStringchức năng, được hiển thị trong một câu trả lời dưới đây.
ybakos

2
Intdường như không có một toString()phương thức ít nhất là không có trong chỉnh sửa Xcode 6.2: Tôi thấy rằng có một toStringphương thức toàn cầu ( không Int.toString() ), có ai biết lợi thế của việc sử dụng hàm String()tạo không?
Nilloc

Lưu ý rằng String(Int?)viết "Tùy chọn (Int)", ít nhất là trong Swift 2, đó không thể là ý bạn. Sử dụng thay thếInt?.description
Teejay

Tuyệt vời, nhưng không làm việc cho tôi. Tôi có một tùy chọn Int và String (myInt) sẽ không biên dịch - nó tuyên bố "Int? Không thể chuyển đổi thành Chuỗi". Không có phương thức toString () hoặc toInt () nào có sẵn cho tôi, hoặc stringValue và intValue không có ở đó. Ngay cả một Chuỗi (myInt!) Sẽ cho tôi biết rằng trình khởi tạo đã được đổi tên thành một chuỗi như Chuỗi (mô tả: myInt!).
Motti Shneor

9
Đối với Swift 4, xem câu trả lời của Hamed Gh bên dưới. Cách sử dụng đúng làString(describing: x)
David Gay

92

Kiểm tra câu trả lời dưới đây:

let x : Int = 45
var stringValue = "\(x)"
print(stringValue)

45
meh, đây là một cách giải quyết xấu xí và không cần thiết khi Stringđã có một nhà xây dựng chấp nhậnInt
Gabriele Petronella

3
bạn nhầm cái gì Tại sao bạn bỏ phiếu? @GabrielePetronella
PREMKUMAR

2
đó chỉ là một cách khủng khiếp để đạt được kết quả mong muốn. Câu trả lời là đúng về mặt kỹ thuật, tuy nhiên, và vì lý do này, tôi đã không downvote.
Gabriele Petronella

Tôi không nghĩ rằng điều này đặc biệt xấu, ngoại trừ một số công cụ phân tích cú pháp có thể không xử lý nội suy chuỗi độc đáo. Nếu không, ai biết được - nó có thể nhanh hơn. Ví dụ, sử dụng "" + x trong Javascript thường nhanh hơn so với sử dụng hàm tạo Chuỗi. Ví dụ này chỉ có một vài ký tự ngắn hơn, nhưng tôi chắc chắn sẽ thích nội suy chuỗi trong trường hợp bạn đang xây dựng một câu từ một số biến.
Desty

1
Tôi sẽ không hạ thấp câu trả lời này chỉ vì nó xấu nhưng như @GabrielePetronella nói, không cần sử dụng phép nội suy chuỗi khi Stringcó hàm tạo chấp nhận Int. Nó rõ ràng và súc tích hơn nhiều.
Isuru

58

Dưới đây là 4 phương pháp:

var x = 34
var s = String(x)
var ss = "\(x)"
var sss = toString(x)
var ssss = x.description

Tôi có thể tưởng tượng rằng một số người sẽ có vấn đề với ss. Nhưng nếu bạn đang tìm cách xây dựng một chuỗi chứa nội dung khác thì tại sao không.


5
Tôi chỉ xem một số khóa học mới của Stanford U trên Swift và iOS 8. var ss = "\(x)"Ví dụ của bạn chính xác là cách họ khuyên chuyển đổi một chuỗi thành một chuỗi. Mà tôi nghĩ là dễ dàng và tuyệt vời.
markhunte

Và suy nghĩ nhiều hơn về sass - điều đó thực sự tồi tệ.
Ian Bradbury

2
toString đã được đổi tên thành String
Jirson Cheesa

1
s bây giờ là chuỗi (Swift 3.1) (mô tả: x) cú pháp cũ hơn dẫn đến lỗi trình biên dịch.
Motti Shneor

3
@MottiShneor Không, điều này là sai. String(describing:)không bao giờ được sử dụng cho bất cứ điều gì khác ngoài gỡ lỗi. Nó không phải là trình khởi tạo String bình thường.
Eric Aya

55

Trong Swift 3.0 :

var value: Int = 10
var string = String(describing: value)

7
Cái này sai. String(describing:)không bao giờ được sử dụng cho bất cứ điều gì khác ngoài gỡ lỗi. Nó không phải là trình khởi tạo String bình thường.
Eric Aya

Điều này vẫn còn sai trong Swift 5? @ayaio, nguyên nhân dựa trên tài liệu không có vẻ sai
Zonily Jame 24/07/19

27

Swift 4 :

let x:Int = 45
let str:String = String(describing: x)

Developer.Apple.com> String> init (mô tả :)

Trình khởi tạo Chuỗi (mô tả :) là cách ưa thích để chuyển đổi một thể hiện của bất kỳ loại nào thành chuỗi.

Chuyển đổi chuỗi tùy chỉnh

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


3
kết quả Tùy chọn (1)
Harshil Kotecha

11
Cái này sai. String(describing:)không bao giờ được sử dụng cho bất cứ điều gì khác ngoài gỡ lỗi. Nó không phải là trình khởi tạo String bình thường.
Eric Aya

3
Hamed Gh, Morithz đã cung cấp câu trả lời đúng trong cùng một câu hỏi kiểm tra câu trả lời của tôi Chỉ cần sử dụng trình khởi tạo String () bình thường. Nhưng đừng cho nó một tùy chọn, mở khóa trước. Hoặc, như trong ví dụ của bạn, sử dụng ??. Như thế này: let str = String (x ?? 0)
Harshil Kotecha

2
@HamedGh Hãy xem các ví dụ trong liên kết bạn đưa ra cho mình. Các describingphương pháp là ở đây để ... mô tả nội dung của nó. Nó đưa ra một mô tả. Đôi khi nó giống như chuyển đổi, đôi khi không . Cung cấp tùy chọn cho describingvà bạn sẽ thấy kết quả ... Đây sẽ không phải là một chuyển đổi. Có một cách đơn giản, chuyên dụng để chuyển đổi: sử dụng trình khởi tạo Chuỗi thông thường, như được giải thích trong các câu trả lời khác. Đọc trang hoàn chỉnh mà bạn liên kết đến: thấy rằng phương pháp này tìm kiếm các mô tả bằng các cách khác nhau, một số trong đó sẽ cho kết quả sai nếu bạn mong đợi chuyển đổi chính xác ..
Eric Aya

2
Bạn thực sự nên loại bỏ phần mô tả của câu trả lời này. Chuyển đổi phải được thực hiện mà không sử dụng bất kỳ tên tham số nào trong hàm tạo Chuỗi.
TimTwoToes

26

Để hoàn thiện, bạn cũng có thể sử dụng:

let x = 10.description

hoặc bất kỳ giá trị nào khác hỗ trợ mô tả.


5
Điều này làm việc cho tôi khi cố gắng hiển thị giá trị trong nhãn. Với các cách tiếp cận khác, nó luôn luôn là Tùy chọn (0) thay vì 0. Cảm ơn bạn
Hardcore_Graverobber

11

Swift 4:

Cố gắng hiển thị giá trị trong nhãn mà không có từ Tùy chọn () .

ở đây x là một giá trị Int sử dụng.

let str:String = String(x ?? 0)

3
Không String(describing:)bao giờ nên được sử dụng cho bất cứ điều gì khác ngoài gỡ lỗi. Nó không phải là trình khởi tạo String bình thường.
Eric Aya

Xin chào @Moritz vậy tôi có thể làm gì để xóa từ tùy chọn? tôi có một giá trị Int và hơn tôi muốn in trên nhãn
Harshil Kotecha

Chỉ cần sử dụng trình String()khởi tạo bình thường . Nhưng đừng cho nó một tùy chọn, mở khóa trước. Hoặc, như trong ví dụ của bạn, sử dụng ??. Như thế này:let str = String(x ?? 0)
Eric Aya

developer.apple.com/documentation/swift/opes/2427941-init tôi hiểu quan điểm của bạn về việc sử dụng mô tả là gì
Harshil Kotecha

Nó chủ yếu cho mục đích gỡ lỗi. Bạn có thể mô tả tên của các lớp, lấy mô tả về các thể hiện, v.v. Nhưng nó không bao giờ nên được sử dụng cho các chuỗi được sử dụng trong chính ứng dụng.
Eric Aya

8

Để tiết kiệm thời gian và rắc rối trong tương lai, bạn có thể tạo một tiện ích mở rộng Int. Thông thường tôi tạo một tệp mã được chia sẻ nơi tôi đặt tiện ích mở rộng, enum và các nội dung thú vị khác. Đây là mã mở rộng trông như thế nào:

extension Int
{
    func toString() -> String
    {
        var myString = String(self)
        return myString
    }
}

Sau đó, khi bạn muốn chuyển đổi một int thành một chuỗi, bạn có thể thực hiện một số thứ như:

var myNumber = 0
var myNumberAsString = myNumber.toString()

Câu hỏi tiềm năng ngu ngốc, nhưng đây nên là một hàm, hay một biến được tính toán? Tôi không thể nhớ lại một Swift thường sử dụng trong những trường hợp này - là nó toInthay toInt().
Maury Markowitz

1
Để tiết kiệm cho mình một chút thời gian và rắc rối chỉ cần sử dụng myNumber.description. Không cần bất kỳ phần mở rộng.
nyg

8

trong swift 3.0, đây là cách chúng ta có thể chuyển đổi Intsang StringStringsangInt

//convert Integer to String in Swift 3.0

let theIntegerValue :Int = 123  // this can be var also
let theStringValue :String = String(theIntegerValue)


//convert String to Integere in Swift 3.0


let stringValue : String = "123"
let integerValue : Int = Int(stringValue)!

1
Trong dòng cuối cùng của mã, tại sao chúng ta cần một dấu chấm than ở cuối?
Omar Tariq ngày

@OmarTariq, bởi vì chúng tôi thông báo rõ ràng cho trình biên dịch rằng integerValueloại của nó là Int. sau đó không thể có một giá trị không cho nó. để trình biên dịch nói với bạn để mở khóa nó. Nếu bạn muốn tránh điều này, hãy sử dụng nó như thế nào let integerValue = Int(stringValue). sau đó bạn sẽ không gặp vấn đề gì xin lỗi vì hồi âm muộn.
Chanaka Caldera

1
@OmarTariq Unwrapping trong trường hợp này có thể thực sự tồi tệ. Nếu chuỗi không phải là số, điều này sẽ làm hỏng ứng dụng của bạn. Bạn nên thực sự kiểm tra để đảm bảo rằng nó hợp lệ và không ép buộc.
Charlie Fish

7

vì bất cứ lý do gì, câu trả lời được chấp nhận không có tác dụng với tôi. Tôi đã đi với phương pháp này:

var myInt:Int = 10
var myString:String = toString(myInt)

5

Nhiều cách để làm điều này:

var str1:String="\(23)"
var str2:String=String(format:"%d",234)

4

Swift 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)

2

tôi sử dụng phương pháp đơn giản này

Chuỗi đến Int:

 var a = Int()
var string1 = String("1")
a = string1.toInt()

và từ Int đến String:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"

2

Chuyển đổi Unicode Int thành Chuỗi

Đối với những người muốn chuyển đổi một Int thành chuỗi Unicode, bạn có thể làm như sau:

let myInteger: Int = 97

// convert Int to a valid UnicodeScalar
guard let myUnicodeScalar = UnicodeScalar(myInteger) else {
    return ""
}

// convert UnicodeScalar to String
let myString = String(myUnicodeScalar)

// results
print(myString) // a

Hay cách khác:

let myInteger: Int = 97
if let myUnicodeScalar = UnicodeScalar(myInteger) {
    let myString = String(myUnicodeScalar)
}

@jvarela, Cái này vẫn hoạt động. Tôi vừa kiểm tra lại nó trong Xcode 8.2 (Swift 3.0.2). Bộ Stringkhởi tạo có thể mất một UnicodeScalar.
Suragch


0

Để chuyển đổi String thành Int

var numberA = Int("10")

Print(numberA) // It will print 10

Để chuyển đổi Int thành Chuỗi

var numberA = 10

Cách 1)

print("numberA is \(numberA)") // It will print 10

Cách 2)

var strSomeNumber = String(numberA)

hoặc là

var strSomeNumber = "\(numberA)"

0
let a =123456888
var str = String(a)

HOẶC LÀ

var str = a as! String

Ví dụ thứ hai của bạn sẽ không hoạt động với Int.
John Montgomery

0

Trong swift 3.0, bạn có thể thay đổi số nguyên thành chuỗi như được đưa ra dưới đây

let a:String = String(stringInterpolationSegment: 15)

Một cách khác là

let number: Int = 15
let _numberInStringFormate: String = String(number)

// hoặc bất kỳ số nguyên nào thay cho 15


1
Từ tham chiếu API "Đừng gọi trình khởi tạo này trực tiếp. Nó được trình biên dịch sử dụng khi diễn giải các phép nội suy chuỗi." Có thể bạn muốn kiểm tra lại nếu bạn đang sử dụng nó ở đâu đó.
Rahul Sharma

0

Tôi thích sử dụng Nội suy chuỗi

let x = 45
let string = "\(x)"

Mỗi đối tượng có một số đại diện chuỗi. Điều này làm cho mọi thứ đơn giản hơn. Ví dụ: nếu bạn cần tạo một số Stringcó nhiều giá trị. Bạn cũng có thể làm bất kỳ phép toán nào trong đó hoặc sử dụng một số điều kiện

let text = "\(count) \(count > 1 ? "items" : "item") in the cart. Sum: $\(sum + shippingPrice)"

0

Nếu bạn thích tiện ích mở rộng nhanh, bạn có thể thêm mã sau đây

extension Int
{
    var string:String {
        get {
            return String(self)
        }
    }
}

sau đó, bạn có thể lấy chuỗi theo phương thức bạn vừa thêm

var x = 1234
var s = x.string


-1
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
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.