@Zeb ответ велик, но просто очистить его и сделать его немного более осторожным. Вычислимые свойства только для чтения должны избегать использования get и return Void избыточно:
typealias GradientPoints = (startPoint: CGPoint, endPoint: CGPoint)
enum GradientOrientation {
case topRightBottomLeft
case topLeftBottomRight
case horizontal
case vertical
var startPoint: CGPoint {
return points.startPoint
}
var endPoint: CGPoint {
return points.endPoint
}
var points: GradientPoints {
switch self {
case .topRightBottomLeft:
return (CGPoint.init(x: 0.0, y: 1.0), CGPoint.init(x: 1.0, y: 0.0))
case .topLeftBottomRight:
return (CGPoint.init(x: 0.0, y: 0.0), CGPoint.init(x: 1, y: 1))
case .horizontal:
return (CGPoint.init(x: 0.0, y: 0.5), CGPoint.init(x: 1.0, y: 0.5))
case .vertical:
return (CGPoint.init(x: 0.0, y: 0.0), CGPoint.init(x: 0.0, y: 1.0))
}
}
}
extension UIView {
func applyGradient(withColours colours: [UIColor], locations: [NSNumber]? = nil) {
let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = colours.map { $0.cgColor }
gradient.locations = locations
self.layer.insertSublayer(gradient, at: 0)
}
func applyGradient(withColours colours: [UIColor], gradientOrientation orientation: GradientOrientation) {
let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = colours.map { $0.cgColor }
gradient.startPoint = orientation.startPoint
gradient.endPoint = orientation.endPoint
self.layer.insertSublayer(gradient, at: 0)
}
}
Если код, который вы вставили, не определен в методе, подобном viewDidLoad
, вы не можете использовать переменную, определенную на уровне класса, для другой переменной, которая также определена на уровне класса. Эти переменные определяются во время выполнения, и порядок, который они определяют, неизвестен, поэтому fortuneArray может не существовать до того, как будет сделан случайный случай (возможно, это не так работает за кулисами, но вы можете думать об этом таким образом, по крайней мере)
вы должны вычислить эти переменные внутри viewDidLoad
или init
или какой-либо другой функции вместо
Ах, я понял это с помощью Фоникса. Я объявил случайное число в IBAction и позаботился об этом.
lazy
, как описано Мартином R в этом ответе? [Д0] stackoverflow.com/questions/25854300/… – Crashalot 23 February 2016 в 18:41