Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mejores Prácitcas Para el Desarrollo de Aplicac...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Mejores Prácitcas Para el Desarrollo de Aplicaciones iOS con Swift

En esta charla expuse una serie tips y consejos prácticos que he identificado durante mi tiempo como desarrollador Swift que te ayudarán a estructurar mejor tus aplicaciones iOS.

Avatar for Oscar Swanros

Oscar Swanros

August 31, 2016
Tweet

More Decks by Oscar Swanros

Other Decks in Programming

Transcript

  1. Tips • Aprovecha la flexibilidad de los módulos • Minimiza

    tus dependencias • Reutiliza la mayor cantidad de código posible • Aprovecha el type-system de Swift • Piensa en el futuro • Una app nunca está 100% feature-complete por
 más de 300 días.
  2. class ContactView: UIView { private lazy var avatarImageView = AvatarImageView()

    } public class BaseOperation<T: JSONParselable>: P3NetworkOperation { } open class P3NetworkOperation: P3Operation { // MARK: - Private Support Types fileprivate enum OperationType { case GetData case Download } }
  3. { "status": "error", "error_code": "authentication_required" } { "status": "success", "data":

    { "users": [ { "username": "anotherSwnanros", "profile_picture": null, "id": 2, "contact_status": 0 } ] } }
  4. public class BaseOperation<T: JSONParselable>: P3NetworkOperation { override public var headerParams:

    [String : String]? { var headers: [String:String] = [:] if let session = SessionManager.sharedManager.currentSession { headers["Authorization"] = "Token token=\"\(session.token)\"" } if [HTTPMethod.PUT, .PATCH, .POST].contains(method) { headers["Content-Type"] = "application/json" } return headers } public override func jsonDownloadComplete() { guard let json = downloadedJSON, let _result = json["result"] as? [String:AnyObject], let statusString = _result.p3_string(key: "status"), let status = CallicoAPIStatus(rawValue: statusString) else { finish(APIError: .malformedServerResponse) return } switch status { case .success: guard let data = _result["data"] as? [String:AnyObject], let parsedResult = T.with(json: data) else { finish(APIError: .malformedServerResponse) return } self.parsedResult = parsedResult generated(result: parsedResult) case .error: // ……. } } func generated(result: T) {} }
  5. public class GetContactsOperation: BaseOperation<ContactCollection> { public override var simpleEndpoint: EndpointConvertible

    { return Endpoint.contacts } public var contacts: ContactCollection? public init?() { super.init() } override func generated(result: ContactCollection) { contacts = result finish() } } guard let op = GetContactsOperation() else { return } queue.addOperation(op)