Добавить возможные типы ввода в CGRect Swift - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу иметь возможность передавать процентное значение в CGRect

Я создал класс Percentage для получения ввода, а затем создал четыре значения (x, y, width, height)

Теперь мне нужно создать расширение для CGRect, чтобы иметь возможность использовать значения Percentage в нем.Расширение возвращает ошибку.

extension CGRect {
    init(x: Percentage, y: Percentage, width: Percentage, height: Percentage) {
        self.init(x: Percentage.x, y: Percentage.y, width: Percentage.width, height: Percentage.height)

ОШИБКА: элемент экземпляра 'x' нельзя использовать для типа 'Процент'

    }
}


class Percentage {
    let x: CGFloat
    let y: CGFloat
    let width: CGFloat
    let height: CGFloat

    init(_ value: CGFloat) {
        self.x = UIScreen.main.bounds.width * value
        self.y = UIScreen.main.bounds.height * value
        self.width = UIScreen.main.bounds.width * value
        self.height = UIScreen.main.bounds.height * value
    }
}

Спасибо за вашу помощь;)

РЕДАКТИРОВАТЬ:

Я хочу иметь возможность использовать его следующим образом:

CGRect(x: Percentage(0.5), y: 50, width: 100, height: 100)

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Думаю, что нет необходимости в пользовательских расширениях / классах - просто используйте:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
let viewRect = view.frame

let scaleFactor:CGFloat = 0.5
let scaledFrame = viewRect.applying(CGAffineTransform(scaleX: scaleFactor, y: scaleFactor))

print("Scaled size: \(scaledFrame)")
// Scaled size: (0.0, 0.0, 50.0, 50.0)

Однако вы также можете переместить эту "функцию" в расширение.

0 голосов
/ 14 декабря 2018

Элемент экземпляра 'x' нельзя использовать для типа 'Percentage'

вы используете тип класса, поэтому даже если у вас есть параметр percentage, он не будетработа.

Но лучше было бы, если бы вы просто передали определенный Percentage в качестве параметра для init, а затем использовали его свойства (используйте его с небольшим p, потому что вам нужен параметр init, а не тип вашего класса)

init(percentage: Percentage) {
    self.init(x: percentage.x, y: percentage.y, width: percentage.width, height: percentage.height)
}

После вашего редактирования я должен сказать, что вам не нужно использовать пользовательский init, и вы можете просто передать свойство вашего Percentage

CGRect(x: yourPercentage.x, y: 50, ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...