我喜欢XCode 6中的新@IBInspectable
概念,我也非常喜欢确保Swift为iOS / OS X开发带来的类型安全的绝佳选择。
但在开发过程中我经常会做的很常见,因为所有这些都很新,我想找出最好的方法:它应 安全 和 简短 。这里的一个班轮很棒,因为那时一个班级的每个属性都会在一行内定义,这会(在我看来)使类更具可读性。
正如苹果公司所展示的那样,Swift是为了使安全性缩短而设计的(参见this video中的接下来的几秒钟),我认为它应该是可能的。这是我现在正在做的事情的一个例子:
import UIKit
@IBDesignable class CustomViewClass: UIView {
@IBOutlet var iconImageView: UIImageView?
@IBOutlet var separatorView: UIView?
@IBInspectable var iconImage: UIImage? { didSet { self.iconImageView!.image = self.iconImage } }
@IBInspectable var separatorColor: UIColor = UIColor.grayColor() { didSet { self.separatorView!.backgroundColor = self.separatorColor } }
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
}
简短 但 不是类型安全的 :例如self.iconImageView
是nil
,那么此代码将具有不安全的行为。从Swift我会期待这样的事情:
import UIKit
@IBDesignable class CustomViewClass: UIView {
@IBOutlet var iconImageView: UIImageView?
@IBOutlet var separatorView: UIView?
@IBInspectable var iconImage: UIImage? { didSet { self.iconImageView?.image = self.iconImage } }
@IBInspectable var separatorColor: UIColor = UIColor.grayColor() { didSet { self.separatorView?.backgroundColor = self.separatorColor } }
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
}
意识到self.iconImageView!
已被self.iconImageView?
所取代,我期望self.iconImageView?.image = self.iconImage
做出类似这样的事情但在一行中:
if self.iconImageView? {
self.iconImageView!.image = self.iconImage
}
有没有人有解决方案?或者目前这是不可能的,所以我们应该提出一个雷达?
答案 0 :(得分:0)
XCode 6 Beta 5的发行说明如下:
?链接运算符也可用于有条件地分配 通过一个可选项,如果它有一个值:
sequences["fibonacci"]?.append(0)
sequences["fibonacci"]?[6] = 13
sequences["perfect"]?[0] = 6
// Does nothing because the sequence has no 'perfect' key
请注意,通过查找可选的属性 AnyObject不能变异。
这意味着我的预期方法应该从现在开始起作用:
@IBInspectable var iconImage: UIImage? { didSet { self.iconImageView?.image = self.iconImage } }