แปลง Int เป็น String ใน Swift


554

ฉันพยายามที่จะหาวิธีที่จะใช้Intเป็นStringในสวิฟท์

ฉันหาวิธีแก้ปัญหาโดยใช้NSNumberแต่ฉันชอบคิดออกว่าจะทำทุกอย่างใน Swift อย่างไร

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

คำตอบ:


961

แปลงIntเป็นString:

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

และวิธีอื่น ๆ - เปลี่ยนStringเป็นInt:

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

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

หรือถ้าคุณใช้ Swift 2 หรือ 3:

let x: Int? = Int(myString)

2
ในขณะที่ใช้งานได้ใช้toStringฟังก์ชั่นที่แสดงในคำตอบด้านล่าง
ybakos

2
Intไม่ปรากฏว่ามีtoString()วิธีการอย่างน้อยไม่ใช่ในการแก้ไข Xcode 6.2: ฉันเห็นว่ามีtoStringวิธีการทั่วโลก( ไม่ใช่ Int.toString() ) ทุกคนรู้ถึงประโยชน์จากการใช้String()Constructor หรือไม่
Nilloc

โปรดทราบว่าString(Int?)เขียนว่า"ตัวเลือก (Int)" อย่างน้อยใน Swift 2 ที่อาจไม่เป็นอย่างที่คุณต้องการ ใช้แทนInt?.description
Teejay

วิเศษ แต่ไม่ได้ผลสำหรับฉัน ฉันมีตัวเลือก Int และ String (myInt) จะไม่คอมไพล์ - มันอ้างว่า "Int? ไม่สามารถแปลงเป็น String" ได้ ไม่มีเมธอด toString () หรือ toInt () สำหรับฉันอย่างใดอย่างหนึ่งหรือ stringValue และ intValue ไม่ได้มี แม้แต่สตริง (myInt!) จะบอกฉันว่า initializer ถูกเปลี่ยนชื่อเป็นบางสิ่งเช่นสตริง (อธิบาย: myInt!)
Motti Shneor

9
สำหรับ Swift 4 ดูคำตอบของ Hamed Gh ด้านล่าง การใช้งานที่ถูกต้องคือString(describing: x)
David Gay

92

ตรวจสอบคำตอบด้านล่าง:

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

45
meh นี้เป็นวิธีแก้ปัญหาที่น่าเกลียดและไม่จำเป็นเมื่อStringมีคอนสตรัคยอมรับแล้วInt
Gabriele Petronella

3
คุณพบสิ่งผิดปกติอะไร ทำไมคุณถึงลงคะแนน? @GabrielePetronella
PREMKUMAR

2
มันเป็นวิธีที่แย่มากในการบรรลุผลตามที่ต้องการ อย่างไรก็ตามคำตอบนั้นถูกต้องทางเทคนิคและด้วยเหตุนี้ฉันจึงไม่ลงคะแนน
Gabriele Petronella

ฉันไม่คิดว่านี่จะน่าเกลียดเป็นพิเศษยกเว้นว่าเครื่องมือการวิเคราะห์คำบางอย่างอาจไม่สามารถจัดการการแก้ไขสตริงได้ ไม่อย่างนั้นใครจะรู้ - มันอาจเร็วกว่า ตัวอย่างเช่นการใช้ "" + x ใน Javascript นั้นเร็วกว่าการใช้ String Constructor ตัวอย่างนี้สั้นลงเพียงไม่กี่ตัวอักษร แต่แน่นอนว่าฉันจะชอบการสอดแทรกสตริงในกรณีที่คุณสร้างประโยคจากตัวแปรหลายตัว
Desty

1
ฉันจะไม่ downvote คำตอบนี้เพียงเพราะมันน่าเกลียด แต่เป็น @GabrielePetronella กล่าวว่ามีความจำเป็นที่จะใช้สตริงการแก้ไขเมื่อมีโครงสร้างที่ยอมรับอีกด้วยString Intมันชัดเจนและรัดกุมมากขึ้น
Isuru

58

นี่คือ 4 วิธี:

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

ฉันสามารถจินตนาการได้ว่าบางคนจะมีปัญหากับเอสเอส แต่ถ้าคุณต้องการสร้างสตริงที่มีเนื้อหาอื่นอยู่ทำไมไม่ทำเช่นนั้น


5
ฉันเพิ่งดูหลักสูตรใหม่ของ Stanford U บน Swift และ iOS 8 var ss = "\(x)"ตัวอย่างของคุณคือวิธีที่พวกเขาแนะนำให้แปลงเป็น double เป็นสตริง ซึ่งฉันคิดว่าเป็นเรื่องง่ายและยอดเยี่ยม
markhunte

และคิดเกี่ยวกับเขื่องมาก - มันแย่จริงๆ
Ian Bradbury

2
toString ถูกเปลี่ยนชื่อเป็น String
Jirson Tavera

1
s ตอนนี้ (Swift 3.1) String (อธิบาย: x) ไวยากรณ์ที่เก่ากว่าทำให้เกิดข้อผิดพลาดของคอมไพเลอร์
Motti Shneor

3
@ MottiShneor ไม่นี่เป็นสิ่งที่ผิด String(describing:)ไม่ควรใช้เพื่อการอื่นใดนอกจากการดีบัก ไม่ใช่ตัวเริ่มต้นของสตริงปกติ
Eric Aya

55

ใน Swift 3.0 :

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

7
นี่เป็นสิ่งที่ผิด String(describing:)ไม่ควรใช้เพื่อการอื่นใดนอกจากการดีบัก ไม่ใช่ตัวเริ่มต้นของสตริงปกติ
Eric Aya

นี่เป็นความผิดปกติใน Swift 5 หรือไม่? @ayaio ก่อให้เกิดการอ้างอิงจากเอกสารดูเหมือนจะไม่ผิด
Zonily Jame

27

สวิฟท์ 4 :

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

Developer.Apple.com> String> init (อธิบาย :)

String (อธิบาย :) initializer เป็นวิธีที่ต้องการแปลงอินสแตนซ์ทุกประเภทเป็นสตริง

Custom String Convertible

ป้อนคำอธิบายรูปภาพที่นี่


3
ผลลัพธ์ตัวเลือก (1)
Harshil Kotecha

11
นี่เป็นสิ่งที่ผิด String(describing:)ไม่ควรใช้เพื่อการอื่นใดนอกจากการดีบัก ไม่ใช่ตัวเริ่มต้นของสตริงปกติ
Eric Aya

3
Hamed Gh, Morithz ให้คำตอบที่ถูกต้องแล้วในคำถามเดียวกันตรวจสอบคำตอบของฉันเพียงใช้ตัวเริ่มต้น String () ปกติ แต่อย่าให้มันเป็นทางเลือกให้แกะก่อน หรือเช่นในตัวอย่างของคุณใช้ ?? เช่นนี้: ให้ str = String (x ?? 0)
Harshil Kotecha

2
@HamedGh ดูตัวอย่างในลิงค์ที่คุณให้กับตัวเอง describingวิธีการอยู่ที่นี่ ... อธิบายเนื้อหา มันให้คำอธิบาย บางครั้งก็เป็นเช่นเดียวกับแปลงที่บางครั้งไม่ ให้ทางเลือกเพื่อdescribingและคุณจะเห็นผลลัพธ์ ... มันจะไม่เป็นการแปลง มีวิธีง่ายๆในการแปลงโดยใช้ตัวเริ่มต้นสตริงตามที่อธิบายไว้ในคำตอบอื่น ๆ อ่านหน้าที่สมบูรณ์แบบที่คุณเชื่อมโยงไปดูว่าวิธีการนี้การค้นหาคำอธิบายโดยใช้วิธีการที่แตกต่างกันบางแห่งซึ่งจะให้ผลลัพธ์ที่ผิดถ้าคุณคาดหวังว่าการแปลงที่ถูกต้อง ..
เอริคอายะ

2
คุณควรนำส่วนที่อธิบายของคำตอบนี้ออกจริง ๆ การแปลงควรทำโดยไม่ใช้ชื่อพารามิเตอร์ใด ๆ ในตัวสร้างสตริง
TimTwoToes

26

เพื่อความสมบูรณ์คุณยังสามารถใช้:

let x = 10.description

หรือค่าอื่น ๆ ที่รองรับคำอธิบาย


5
สิ่งนี้ใช้ได้สำหรับฉันเมื่อพยายามแสดงค่าในป้ายกำกับ ด้วยวิธีอื่นมันเป็นตัวเลือกเสมอ (0) แทน 0 ขอบคุณ
Hardcore_Graverobber

11

สวิฟท์ 4:

กำลังพยายามแสดงค่าในป้ายกำกับโดยไม่มีตัวเลือก ()คำ

นี่คือค่า x โดยใช้

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

3
ไม่String(describing:)ควรไม่ใช้สิ่งอื่นนอกเหนือจากการดีบัก ไม่ใช่ตัวเริ่มต้นของสตริงปกติ
Eric Aya

สวัสดี @ Moritz ฉันจะทำอย่างไรเพื่อลบคำที่ไม่จำเป็นออก ฉันมีค่า Int และมากกว่าที่ฉันต้องการพิมพ์ในฉลาก
Harshil Kotecha

เพียงใช้เครื่องมือString()เริ่มต้นปกติ แต่อย่าให้มันเป็นตัวเลือกไม่ต้องแกะก่อน ??หรือชอบในตัวอย่างของการใช้งาน เช่นนี้:let str = String(x ?? 0)
Eric Aya

developer.apple.com/documentation/swift/string/2427941-init ฉันเข้าใจประเด็นของคุณว่าอะไรคือการใช้การอธิบาย
Harshil Kotecha

ส่วนใหญ่ใช้สำหรับการดีบัก คุณสามารถอธิบายชื่อของคลาสรับรายละเอียดของอินสแตนซ์ ฯลฯ แต่ไม่ควรใช้สำหรับสตริงที่ใช้ในแอปนั้น ๆ
Eric Aya

8

เพื่อเป็นการประหยัดเวลาและความยุ่งยากในอนาคตคุณสามารถสร้างส่วนเสริม Int ได้ โดยทั่วไปฉันสร้างไฟล์รหัสที่ใช้ร่วมกันซึ่งฉันใส่ส่วนขยาย, enums และสิ่งที่สนุกสนานอื่น ๆ นี่คือลักษณะของรหัสส่วนขยาย:

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

จากนั้นเมื่อคุณต้องการแปลง int เป็นสตริงคุณสามารถทำสิ่งต่อไปนี้

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

อาจเป็นคำถามโง่ ๆ แต่สิ่งนี้ควรเป็นฟังก์ชันหรือตัวแปรที่คำนวณได้หรือไม่? ฉันไม่สามารถเรียกคืนสวิฟท์ที่หนึ่งที่ปกติใช้ในกรณีเหล่านี้ - มันเป็นหรือtoInt toInt()
Maury Markowitz

1
myNumber.descriptionการช่วยตัวเองบางเวลาและความยุ่งยากเพียงแค่ใช้ ไม่จำเป็นต้องมีส่วนขยายใด ๆ
nyg

8

ในสวิฟท์ 3.0นี้เป็นวิธีที่เราสามารถแปลงIntไปStringและStringจะInt

//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
ในบรรทัดสุดท้ายของรหัสทำไมเราต้องมีเครื่องหมายอัศเจรีย์ท้าย?
Omar Tariq

@OmarTariq เพราะเราบอกผู้แปลอย่างชัดเจนว่าintegerValueประเภทของมันคือIntอะไร จากนั้นไม่สามารถมีค่าศูนย์ได้ คอมไพเลอร์บอกให้คุณแกะมัน let integerValue = Int(stringValue)ถ้าคุณต้องการหลีกเลี่ยงปัญหานี้ใช้มันเหมือน จากนั้นคุณจะไม่ได้รับปัญหา ขออภัยสำหรับการตอบกลับปลาย.
Chanaka Caldera

1
@OmarTariq การแกะตัวผู้ในกรณีนี้อาจไม่ดีจริงๆ หากสตริงไม่ใช่ตัวเลขสิ่งนี้จะทำให้แอปพลิเคชันของคุณเสียหาย คุณควรตรวจสอบเพื่อให้แน่ใจว่าถูกต้องและไม่บังคับให้แกะออก
Charlie Fish

7

ไม่ว่าด้วยเหตุผลใดคำตอบที่ยอมรับไม่ได้ผลสำหรับฉัน ฉันใช้วิธีนี้:

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



2

เอี่ยมใช้วิธีการง่าย ๆ นี้

สตริงเป็น Int:

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

และจาก Int ถึง String:

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

2

แปลง Unicode Int เป็น String

สำหรับผู้ที่ต้องการแปลง Int เป็นสตริง Unicode คุณสามารถทำสิ่งต่อไปนี้:

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

หรืออีกทางหนึ่ง:

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

@jvarela ยังใช้งานได้ ฉันเพิ่งทดสอบใหม่ใน Xcode 8.2 (Swift 3.0.2) Stringinitializer UnicodeScalarสามารถใช้
Suragch


0

ในการแปลง String เป็น Int

var numberA = Int("10")

Print(numberA) // It will print 10

ในการแปลง Int เป็น String

var numberA = 10

วิธีที่ 1)

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

วิธีที่ 2)

var strSomeNumber = String(numberA)

หรือ

var strSomeNumber = "\(numberA)"


0

ใน swift 3.0 คุณสามารถเปลี่ยนจำนวนเต็มเป็นสตริงตามที่ระบุด้านล่าง

let a:String = String(stringInterpolationSegment: 15)

อีกวิธีคือ

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

// หรือเลขจำนวนเต็มใด ๆ แทนที่ 15


1
จากการอ้างอิง API "อย่าเรียก initializer นี้โดยตรงมันถูกใช้โดยคอมไพเลอร์เมื่อตีความการสอดแทรกสตริง" อาจเป็นเพราะคุณต้องการตรวจสอบอีกครั้งหากคุณใช้ที่อื่น
ราหุลชาร์

0

ฉันชอบใช้การแก้ไขสตริง

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

แต่ละวัตถุมีการแทนค่าสตริง สิ่งนี้ทำให้ง่ายขึ้น ตัวอย่างเช่นหากคุณต้องการสร้างบางอย่างที่Stringมีหลายค่า คุณยังสามารถทำคณิตศาสตร์ใด ๆ ในนั้นหรือใช้เงื่อนไขบางอย่าง

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

0

หากคุณชอบส่วนขยายที่รวดเร็วคุณสามารถเพิ่มรหัสต่อไปนี้

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

จากนั้นคุณจะได้รับสตริงโดยวิธีการที่คุณเพิ่งเพิ่ม

var x = 1234
var s = x.string


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.