Как получить целочисленные значения в NSPoint для отображения в виде целого числа, а не десятичного числа - PullRequest
0 голосов
/ 01 июня 2019

Как получить целочисленные значения в NSPoint для отображения в виде целого числа, а не десятичного числа?

let temp:NSPoint = NSMakePoint(5,7)

print(temp.x) . // displays 5.0

Я хочу, чтобы отображалось только 5, а не 5,0

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Вы спрашиваете:

Как получить целочисленные значения в NSPoint для отображения в виде целого числа, а не десятичного числа.

Этот вопрос может основываться на ложной предпосылке. Параметры, которые вы предоставляете для NSMakePoint(_:_:), на самом деле CGFloat (как и базовые свойства x и y). Поэтому, хотя вы указали целые числа, Swift сохраняет их как CGFloat для x и y, независимо от того.

Итак, вопрос в том, «Как вы отображаете CGFloat свойства NSPoint без дробных цифр?»

Конечно, как и предполагали другие, вы можете создать целое число из CGFloat свойств с помощью Int(point.x) и т. Д., Но я могу предположить, что вы действительно хотите просто отобразить эти CGFloat без десятичных знаков. Есть несколько способов сделать это.

Рассмотрим:

let point = NSPoint(x: 5000, y: 7000)

Вы также можете использовать NSMakePoint, но в Swift это немного более естественно.

Затем, чтобы отобразить это без десятичных разрядов, у вас есть несколько вариантов:

  1. В macOS NSStringFromPoint сгенерирует полное значение CGPoint без десятичных знаков:

    print(NSStringFromPoint(point))             // "{5000, 7000}"
    
  2. Вы можете использовать String(format:_:), используя строку формата, которая явно не задает десятичных знаков:

    print(String(format: "%.0f", point.x))      // "5000"
    
  3. Вы можете использовать NumberFormatter и указать minimumFractionDigits:

    let formatter = NumberFormatter()
    formatter.minimumFractionDigits = 0
    formatter.numberStyle = .decimal
    print(formatter.string(for: point.x)!)      // "5,000"
    

    Нет необходимости говорить, что вы можете сохранить этот форматер и использовать его повторно, по мере необходимости, если вы хотите, чтобы ваш код не становился слишком многословным.

  4. Если вы просто регистрируете это на консоли, вы можете использовать Unified Logging с import os.log и затем сделать:

    os_log("%.0f", point.x)                      // "5000"
    
0 голосов
/ 01 июня 2019

Вы можете конвертировать значение CGPoint в Int.

let point: NSPoint = NSMakePoint(5,7)
let x = Int(point.x)
let y = Int(point.y)
print(point.x)       // displays 5.0
print(x)             // displays 5
print(y)             // displays 7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...