Как я могу изменить UILabel в число программно? [Дубликат]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

459
задан Mike Chamberlain 18 July 2015 в 10:40
поделиться

20 ответов

Преобразование 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)
791
ответ дан Bart van Kuik 19 August 2018 в 15:17
поделиться
  • 1
    Пока это работает, используйте функцию toString, показанную в ответе ниже. – ybakos 28 January 2015 в 23:20
  • 2
    Int, похоже, не имеет метода toString(), по крайней мере, не в редакторе Xcode 6.2: я вижу, что существует глобальный метод toString ( not Int.toString()), каждый знает, что преимущество перед использованием конструктора String()? – Nilloc 13 April 2015 в 01:58
  • 3
    пусть x: Int? = str.integerValue работал для меня – Mashhadi 16 April 2015 в 17:35
  • 4
    Я добавил заметку для Swift 2. Надеюсь, все в порядке. – Brigham 9 June 2015 в 19:52
  • 5
    Для Swift 4 см. Ответ Хамид Га. Правильное использование - String(describing: x) – David Gay 20 February 2018 в 18:23

Преобразование String в Int

var numberA = Int("10")

Print(numberA) // It will print 10

К скрытому Int в String

var numberA = 10

1st way)

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

2nd way)

var strSomeNumber = String(numberA)

или

var strSomeNumber = "\(numberA)"
0
ответ дан Anil Kukadeja 19 August 2018 в 15:17
поделиться

в swift 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)!
7
ответ дан Anuradh S 19 August 2018 в 15:17
поделиться
  • 1
    В последней строке кода, зачем нам нужен восклицательный знак в конце? – Omar Tariq 3 March 2017 в 19:44
  • 2
    @OmarTariq, потому что явным образом сообщает компилятору, что тип integerValue - Int. то для него не может быть нулевого значения. поэтому компилятор говорит вам разворачивать его. если вы хотите этого избежать, используйте его как let integerValue = Int(stringValue). то у вас не возникнет проблема. Извините за поздний ответ. – Anuradh S 22 May 2017 в 09:10
  • 3
    @OmarTariq Разборка в этом случае может быть очень плохой. Если строка не является числом, это приведет к краху вашего приложения. Вы действительно должны убедиться, что это действительно так, а не принудительно развернуть его. – Charlie Fish 8 January 2018 в 04:11

по какой-либо причине принятый ответ не сработал для меня. Я пошел с таким подходом:

var myInt:Int = 10
var myString:String = toString(myInt)
7
ответ дан bkopp 19 August 2018 в 15:17
поделиться
  • 1
    Да .. одна и та же проблема ..принятый ответ не работает .. ваш ответ работает для меня .. – Ranjith Kumar 23 March 2015 в 11:19

Несколько способов сделать это:

var str1:String="\(23)"
var str2:String=String(format:"%d",234)
5
ответ дан Dhruv Ramani 19 August 2018 в 15:17
поделиться

В swift 3.0 вы можете изменить целое число на строку, как указано ниже

let a:String = String(stringInterpolationSegment: 15)

. Другой способ -

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

// или любое целое число вместо 15

0
ответ дан Dilip Jangid 19 August 2018 в 15:17
поделиться
  • 1
    Из ссылки API «Не вызывайте этот инициализатор напрямую. Он используется компилятором при интерпретации строковых интерполяций. & Quot; Может быть, вы хотите дважды проверить, используете ли вы где-нибудь. – Rahul Sharma 1 June 2017 в 17:37

Swift 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)
4
ответ дан durron597 19 August 2018 в 15:17
поделиться
let a =123456888
var str = String(a)

ИЛИ

var str = a as! String
1
ответ дан FelixSFD 19 August 2018 в 15:17
поделиться

Проверьте ответ ниже:

let x : Int = 45
var stringValue = "\(x)"
print(stringValue)
79
ответ дан Forge 19 August 2018 в 15:17
поделиться
  • 1
    meh, это уродливое и ненужное обходное решение, когда String уже имеет конструктор, принимающий Int – Gabriele Petronella 11 June 2014 в 12:12
  • 2
    что вы не нашли это? почему вы подали голос? @GabrielePetronella – PREMKUMAR 11 June 2014 в 12:15
  • 3
    это просто ужасный способ достижения желаемого результата. Однако ответ технически правильный, и по этой причине я не спустил вниз. – Gabriele Petronella 11 June 2014 в 12:22
  • 4
    Я не думаю, что это особенно уродливо, за исключением того, что некоторые инструменты синтаксического анализа не могут прекрасно обрабатывать интерполяцию строк. В противном случае, кто знает - это может быть быстрее. Например, использование «+ x» в Javascript быстрее, чем при использовании конструктора String. Этот пример - всего на пару символов короче, но я бы предпочел бы строку интерполяции в тех случаях, когда вы строили предложение из нескольких переменных. – Desty 12 June 2014 в 10:22
  • 5
    Я бы не отказал в этом ответе только потому, что его уродливый, но, как сказал @GabrielePetronella, нет необходимости использовать интерполяцию строк, когда String имеет конструктор, который принимает Int. Его гораздо яснее и кратким. – Isuru 15 September 2014 в 07:30

Swift 4:

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

Developer.Apple.com> String> init (описание:)

19
ответ дан Hamed Gh 19 August 2018 в 15:17
поделиться
  • 1
    Благодарю. Какое бессмысленное нарушение ... – Simon Briggs 4 December 2017 в 09:17
  • 2
    результат Необязательный (1) – Harshil Kotecha 31 March 2018 в 05:59
  • 3
    Это не верно. String(describing:) никогда не должен использоваться ни для чего другого, кроме отладки. Это не обычный инициализатор строки. – Moritz 31 March 2018 в 09:33
  • 4
    Hamed Gh, Мориц уже предоставил правильный ответ в том же вопросе, чтобы проверить мой ответ. Просто используйте обычный инициализатор String (). Но не дайте ему опционально, сначала распакуйте. Или, как в вашем примере, используйте?. Например: let str = String (x ?? 0) – Harshil Kotecha 29 April 2018 в 04:54
  • 5
    Невероятно. Иногда все проще, чем мы думаем. – Joaquin Pereira 18 June 2018 в 17:37

Swift 4:

Попытка показать значение в метке без дополнительного () слова.

здесь x является значением Int с использованием.

let str:String = String(x ?? 0)
4
ответ дан Harshil Kotecha 19 August 2018 в 15:17
поделиться
  • 1
    Нет. String(describing:) никогда не следует использовать ни для чего другого, кроме отладки. Это не обычный инициализатор строки. – Moritz 31 March 2018 в 09:33
  • 2
    Здравствуйте @Moritz, так что я могу сделать для удаления необязательного слова? У меня есть значение Int и я хочу печатать на этикетке – Harshil Kotecha 31 March 2018 в 09:54
  • 3
    Просто используйте обычный String() инициализатор. Но не дайте ему опционально, сначала распакуйте. Или, как в вашем примере, используйте ??. Например: let str = String(x ?? 0) – Moritz 31 March 2018 в 10:07
  • 4
    хорошо, я отредактирую свой ответ @Moritz спасибо – Harshil Kotecha 31 March 2018 в 10:21
  • 5
    developer.apple.com/documentation/swift/string/2427941-init Я понимаю ваш смысл, что такое использование описания – Harshil Kotecha 31 March 2018 в 11:03

Вот 4 метода:

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

Я могу себе представить, что у некоторых людей будет проблема с ss. Но если вы хотите создать строку, содержащую другой контент, то почему бы и нет.

47
ответ дан Ian Bradbury 19 August 2018 в 15:17
поделиться
  • 1
    Я просто смотрю некоторые из новых курсов Stanford U на Swift и iOS 8. Ваш пример var ss = "\(x)" - это именно то, как они советовали преобразовать double в строку. Я думал, что это легко и просто. – markhunte 29 January 2015 в 01:00
  • 2
    И думать больше о сассах - это действительно плохо. – Ian Bradbury 29 January 2015 в 12:38
  • 3
    toString была переименована в String – Jirson Tavera 4 March 2016 в 14:26
  • 4
    s теперь (Swift 3.1) String (описывая: x) старший синтаксис дает ошибку компилятора. – Motti Shneor 9 March 2017 в 01:55
  • 5
    @MottiShneor Нет, это неправильно. String(describing:) никогда не должен использоваться ни для чего другого, кроме отладки. Это не обычный инициализатор строки. – Moritz 3 April 2018 в 09:15

exampleLabel.text = String(yourInt)

0
ответ дан Michael 19 August 2018 в 15:17
поделиться

Просто для полноты вы также можете использовать:

let x = 10.description

или любое другое значение, которое поддерживает описание.

21
ответ дан Mike Lischke 19 August 2018 в 15:17
поделиться
  • 1
    Это работало для меня при попытке показать значение в ярлыке. С другими подходами он всегда был необязательным (0), а не 0. Спасибо – Hardcore_Graverobber 25 January 2017 в 20:09
let Str = "12"
let num: Int = 0
num = Int (str)
0
ответ дан mmgross 19 August 2018 в 15:17
поделиться

iam, используя этот простой подход

String to Int:

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

и от Int до String:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"
2
ответ дан Muraree Pareek 19 August 2018 в 15:17
поделиться

Преобразование 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)
}
2
ответ дан Suragch 19 August 2018 в 15:17
поделиться
  • 1
    @jvarela, Это все еще работает. Я просто пересмотрел его в Xcode 8.2 (Swift 3.0.2). Инициализатор String может принимать значение UnicodeScalar. – Suragch 2 January 2017 в 06:17

Чтобы сэкономить время и хлопот в будущем, вы можете сделать расширение Int. Обычно я создаю общий файл кода, где я добавляю расширения, перечисления и другие забавные вещи. Вот как выглядит код расширения:

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

. Затем, когда вы хотите преобразовать int в строку, вы можете просто сделать что-то вроде:

var myNumber = 0
var myNumberAsString = myNumber.toString()
8
ответ дан user2266987 19 August 2018 в 15:17
поделиться
  • 1
    Потенциально глупый вопрос, но должен ли это быть функцией или вычисленной переменной? Я не могу вспомнить, какой из них обычно использует Swift - это toInt или toInt(). – Maury Markowitz 10 February 2016 в 18:16
  • 2
    Чтобы сэкономить время и хлопоты, просто используйте myNumber.description. Нет необходимости в каких-либо расширениях. – nyg 16 August 2017 в 09:44

В Swift 3.0:

var value: Int = 10
var string = String(describing: value)
51
ответ дан vladiulianbogdan 19 August 2018 в 15:17
поделиться
  • 1
    Это не верно. String(describing:) никогда не должен использоваться ни для чего другого, кроме отладки. Это не обычный инициализатор строки. – Moritz 31 March 2018 в 09:34
-1
ответ дан midhun p 31 October 2018 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: