2016-11-22 115 views
0

问题:如何使用默认属性值来初始化对象?可以重写类中的init来创建对象吗?使用默认属性值初始化对象

我想避免使用视图控制器来输入对象的属性数据。我不从外部来源提取数据。只想将数据保存在单独的文件中,如类文件,因为应用程序涉及大量文本。

我想到的对象看起来像一个典型的具有多个属性的类对象:object1(prop1:“string”,prop2:[string],prop3:[string]等.. ),但创建在同一个类中插入到一个对象数组中。

回答

0

使用无格式枚举,类似于名称空间来存储文本。然后只需在默认初始化器中引用它们。

enum StaticText { 
    static let A = "A" 
    static let B = "B" 
    static let C = "C" 
} 


class SomeClass { 
    let A = StaticText.A 
    let B = StaticText.B 
    let C = StaticText.C 
} 
+0

如果静态值是你所需要的,你为什么要用static而不是struct或class? – Ryan

+0

这是目前的Swift约定。这是Swift最接近命名空间的东西。枚举不能被意外实例化。 – Alexander

+1

http://stackoverflow.com/a/38585994/3141234 https://github.com/raywenderlich/swift-style-guide#constants – Alexander

0

让使用便利初始化的延伸:

public class ToolBoardView: UIVisualEffectView { 

    public var closeButton = ToolBoardCloseButton() 
    public var imageSegments = UISegmentedControl (items: ["Subject","Frame"]) 
    internal var sliderBackgrounds:[UILabel] = [] 

    convenience internal init(
     _ tag   :Int, 
     _ p: inout [NSLayoutConstraint], 
     _ l: inout [NSLayoutConstraint], 
     _ target  :Any, 
     _ hideAction :Selector 
     ) 
    { 
     self.init(frame: CGRect.zero) 
     self.effect = UIBlurEffect(style: .light) 
     self.tag = tag 
     switch tag { 
     case 0: 
      break 
     case 1: 
      addFilterControls(&p, &l) 
     default: 
      break 
     } 
     closeButton = ToolBoardCloseButton(tag: tag, target: target, action: hideAction) 
     self.addSubview(closeButton) 
     turnOffAutoResizing() 
     makeControlsHidden(true) 
    } 
} 

这只是一个我的一部分,但它应该让你去。

Here是我刚发布的内容的一个很好的描述。