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

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

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.

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)