3 回答

TA貢獻1810條經(jīng)驗 獲得超5個贊
對于Swift 3.0
final class Shared { static let shared = Shared() //lazy init, and it only runs once var stringValue : String! var boolValue : Bool!}
設置 stringValue
Shared.shared.stringValue = "Hi there"
要得到 stringValue
if let value = Shared.shared.stringValue { print(value) }
適用于低于3.0的Swift版本
您可以使用singleton類在視圖之間傳遞數(shù)據(jù)。這是簡單而有效的方式。這是我的ShareData.swift類
import Foundationclass ShareData { class var sharedInstance: ShareData { struct Static { static var instance: ShareData? static var token: dispatch_once_t = 0 } dispatch_once(&Static.token) { Static.instance = ShareData() } return Static.instance! } var someString : String! //Some String var selectedTheme : AnyObject! //Some Object var someBoolValue : Bool!}
現(xiàn)在ViewControllerOne
我可以設置上面的變量。
//Declare Class Variablelet shareData = ShareData.sharedInstanceoverride func viewDidLoad() { self.shareData.someString ="Some String Value"}
而在我ViewControllerTwo
,我可以訪問someString
如
let shareData = ShareData.sharedInstanceoverride func viewDidLoad() { NSLog(self.sharedData.someString) // It will print Some String Value}

TA貢獻1775條經(jīng)驗 獲得超8個贊
就個人而言,我更喜歡以下方式:
如果你想在兩個視圖控制器(從A到B)之間向前跳轉(zhuǎn),如-pushViewController:animated:在導航中,你可以為Controller B定義一個模型的屬性并公開它,然后在從Controller跳轉(zhuǎn)之前顯式設置這個屬性A,這很簡單;
如果您想從控制器B向后跳轉(zhuǎn)到A,請使用委托+協(xié)議模式??刂破鰾起草公共協(xié)議并擁有“委托”屬性,任何想要成為控制器B代表的對象都應遵守并實施其協(xié)議(可選)。然后在跳轉(zhuǎn)之前,控制器B使其代表執(zhí)行協(xié)議中列出的某些動作,數(shù)據(jù)可以這種方式傳輸;
在某些情況下,您可能希望將數(shù)據(jù)從Controller(或控制器)傳輸?shù)狡渌鄠€控制器,如果是這種情況,請使用通知機制。
Apple在官方文檔中有關于委托模式,通知模式的詳細說明,請在XCode中查看,:)
- 3 回答
- 0 關注
- 712 瀏覽
添加回答
舉報