最佳答案
遵循MVC结构,如下图所示
以后打开文件结构,项目应如下图所示
主页结构,包含HomeStoryboard(此处为主要故事板)中的所有VC
注意:在物理目录中必须遵循相同的结构。
参考: https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html
编辑
文件组织是一种将文件保存在文件夹中的基本方法,就像书架上的书一样,我的意思是同一主题的书在同一行类型上。
在您的文件层次结构中,访问文件并不重要。如果将文件添加到项目目录中,则X代码会自动识别您的文件并相应地建议您。
对于每个文件,您都必须使用init方法才能将该文件放入内存,也可以覆盖init方法。
接受裁判: https://medium.com/ios-objective-creation/lesson-2-creating-custom-classes-in-objective-c-17f760ce9732
编辑(2019年3月27日)
现在,我正在使用这种新模式,这对我很有帮助。
现在您不需要MVC文件夹,我的意思是在父目录中添加模型,查看,控制器并删除MVC目录。检查下面
这是每个主题的简要说明。
在下面的Device.swift文件中,具有与设备相关的功能,例如Is_Ipad,is_iPhone6_7_8等。
CallAPI+Home
是Home模块的API的扩展。每个模块都有单独的扩展。最后描述它的工作。如果您的应用很小,则可以跳过此部分,直接使用Utility中的API。
APICall如何工作?
流程图
1. First controller calls CallAPI, every API have its own func to get data and bind into it model.
2. CallAPI calls Webservices and decides type of API (post, get).
3. WebServices have alomofire call service. It gets data from service and return back to Call API.
4. If API result success, then CallAPI binds model data else it shows error alert.
5. Now Model data is returned to the Call API.
6. Now callAPi returns Model data to controller.
一些示例代码
func validateUserAPI(){
guard self.isValidateTF() else {
return
}
let param = [ "sPassword": Common.encodeBase64(withOutPass: tfPassword.text!)!,
"sUserName": Common.encodeBase64(withOutPass: tfUsername.text!)!
] as [String : Any]
// Validate User
CallAPI.submitValidateUser(params: param) { [weak self] (submitResult) in
guard let aSelf = self else {return}
let aResultValidate = submitResult.validateUserResult[0]
if aResultValidate.status == 0 {
Alert.showAlertError(title: "Error", body: aResultValidate.message)
}
else {
// save data to user defaults
}
}
}
extension CallAPI {
class func submitValidateUser( params: [String : Any], completionHandler: @escaping ((LoginValidateUser) -> Void)) {
HUD.startIndeterminate("Loading...")
WebService.postAlamofire(API.ValidateUser, params: params) { (errMsg, result) in
HUD.stopIndeterminate()
if result.isSuccess {
// If data success, bind data into model and return back to controller
let resultModel = LoginValidateUser(fromDictionary: result.value! as! [String : Any])
completionHandler(resultModel)
}
else {
Alert.showAlertError(title: "Error", body: errMsg!)
}
}
}
}
class WebService {
class func getAlamofire(_ url : String, completionHandler: @escaping (( String?, Result<Any>) -> Void) ){
Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { (jsonResult) in
completionHandler((jsonResult.error?.localizedDescription),jsonResult.result)
}
}
class func postAlamofire(_ url : String, params: [String:Any], completionHandler: @escaping (( String?, Result<Any>) -> Void) ){
print("************************************")
print("************************************")
print("URL ----> \(url)")
print("INPUT ----> \(params)")
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: nil).responseJSON { (jsonResult) in
print("OUTPUT ---->")
print(jsonResult.result.value)
completionHandler((jsonResult.error?.localizedDescription),jsonResult.result)
}
}
}
struct API {
static let ValidateUser = "\(kBaseURL)ValidateUser"
}
关于ios - 如何使用Swift在Xcode中组织文件以进行iOS开发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44469395/