programming swift ios dependency injection