2016-11-22 126 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是我剛發佈的內容的一個很好的描述。