Follow link to apply
- Senior iOS Engineer
- Lead iOS Engineer
06 Sep, 09:42
14 Aug, 13:07
execute.
// Протокол команды
protocol Command {
func execute()
}
// Получатель
class Light {
func on() {
print("Свет включен")
}
func off() {
print("Свет выключен")
}
}
// Конкретная команда для включения света
class LightOnCommand: Command {
private var light: Light
init(light: Light) {
self.light = light
}
func execute() {
light.on()
}
}
// Конкретная команда для выключения света
class LightOffCommand: Command {
private var light: Light
init(light: Light) {
self.light = light
}
func execute() {
light.off()
}
}
// Отправитель
class RemoteControl {
private var commands = [String: Command]()
func setCommand(button: String, command: Command) {
commands[button] = command
}
func pressButton(button: String) {
commands[button]?.execute() ?? print("Команда не назначена")
}
}
// Клиентский код
let light = Light()
let lightOnCommand = LightOnCommand(light: light)
let lightOffCommand = LightOffCommand(light: light)
let remoteControl = RemoteControl()
remoteControl.setCommand(button: "ON", command: lightOnCommand)
remoteControl.setCommand(button: "OFF", command: lightOffCommand)
remoteControl.pressButton(button: "ON") // Свет включен
remoteControl.pressButton(button: "OFF") // Свет выключен
05 Aug, 15:47
31 Jul, 06:00
29 Jul, 11:20
// Продукт
class Pizza {
var dough: String = ""
var sauce: String = ""
var topping: String = ""
}
// Абстрактный строитель
protocol PizzaBuilder {
func setDough()
func setSauce()
func setTopping()
func getPizza() -> Pizza
}
// Конкретный строитель
class MargheritaPizzaBuilder: PizzaBuilder {
private var pizza = Pizza()
func setDough() {
pizza.dough = "Thin Crust"
}
func setSauce() {
pizza.sauce = "Tomato Basil"
}
func setTopping() {
pizza.topping = "Mozzarella Cheese"
}
func getPizza() -> Pizza {
return pizza
}
}
// Директор
class Director {
private var builder: PizzaBuilder?
func setBuilder(builder: PizzaBuilder) {
self.builder = builder
}
func constructPizza() {
builder?.setDough()
builder?.setSauce()
builder?.setTopping()
}
func getPizza() -> Pizza? {
return builder?.getPizza()
}
}
// Использование
let director = Director()
let margheritaBuilder = MargheritaPizzaBuilder()
director.setBuilder(builder: margheritaBuilder)
director.constructPizza()
if let pizza = director.getPizza() {
print("Dough: \(pizza.dough), Sauce: \(pizza.sauce), Topping: \(pizza.topping)")
}
24 Jul, 06:01
23 Jul, 06:02
UserManager
, который отвечает за управление данными пользователей:// UserManager.swift
import Foundation
class UserManager {
private var users: [String: User] = [:]
func addUser(_ user: User) {
users[user.id] = user
}
func removeUser(withId id: String) {
users.removeValue(forKey: id)
}
func getUser(withId id: String) -> User? {
return users[id]
}
}
struct User {
let id: String
let name: String
}
// UserManagerTests.swift
import XCTest
@testable import YourAppModuleName
class UserManagerTests: XCTestCase {
var userManager: UserManager!
override func setUp() {
super.setUp()
userManager = UserManager()
}
override func tearDown() {
userManager = nil
super.tearDown()
}
func testAddUser() {
let user = User(id: "1", name: "John Doe")
userManager.addUser(user)
let retrievedUser = userManager.getUser(withId: "1")
XCTAssertNotNil(retrievedUser)
XCTAssertEqual(retrievedUser?.id, "1")
XCTAssertEqual(retrievedUser?.name, "John Doe")
}
func testRemoveUser() {
let user = User(id: "1", name: "John Doe")
userManager.addUser(user)
userManager.removeUser(withId: "1")
let retrievedUser = userManager.getUser(withId: "1")
XCTAssertNil(retrievedUser)
}
func testGetUser() {
let user = User(id: "1", name: "John Doe")
userManager.addUser(user)
let retrievedUser = userManager.getUser(withId: "1")
XCTAssertNotNil(retrievedUser)
XCTAssertEqual(retrievedUser?.id, "1")
XCTAssertEqual(retrievedUser?.name, "John Doe")
}
}
Cmd + U
или выберите пункт меню Product > Test
.17 Jul, 06:46
class Service {
func doSomething() -> String {
return "Service is doing something."
}
}
class Client {
let service: Service
init(service: Service) {
self.service = service
}
func performAction() -> String {
return service.doSomething()
}
}
// Внедрение зависимости через конструктор
let service = Service()
let client = Client(service: service)
print(client.performAction()) // Выведет: Service is doing something.
class Client {
var service: Service?
func setService(service: Service) {
self.service = service
}
func performAction() -> String? {
return service?.doSomething()
}
}
// Внедрение зависимости через сеттер
let service = Service()
let client = Client()
client.setService(service: service)
print(client.performAction() ?? "") // Выведет: Service is doing something.
protocol ServiceProtocol {
func doSomething() -> String
}
class Service: ServiceProtocol {
func doSomething() -> String {
return "Service is doing something."
}
}
class Client {
var service: ServiceProtocol?
func setService(service: ServiceProtocol) {
self.service = service
}
func performAction() -> String? {
return service?.doSomething()
}
}
// Внедрение зависимости через интерфейс
let service = Service()
let client = Client()
client.setService(service: service)
print(client.performAction() ?? "") // Выведет: Service is doing something.
02 Jul, 06:01
28 Jun, 05:34
import SwiftData
@Model
class TodoItem {
@ID var id: UUID
var title: String
var isCompleted: Bool
init(id: UUID = UUID(), title: String, isCompleted: Bool = false) {
self.id = id
self.title = title
self.isCompleted = isCompleted
}
}
import SwiftData
class PersistenceController {
static let shared = PersistenceController()
let container: DataContainer
private init() {
container = try! DataContainer(name: "TodoApp")
try! container.addModel(TodoItem.self)
}
}
func createTodoItem(title: String) {
let newItem = TodoItem(title: title)
try? PersistenceController.shared.container.save(newItem)
}
func fetchAllTodoItems() -> [TodoItem] {
let fetchRequest = FetchRequest<TodoItem>(predicate: nil, sortDescriptors: [])
let result = try? PersistenceController.shared.container.fetch(fetchRequest)
return result ?? []
}
func updateTodoItem(item: TodoItem, newTitle: String) {
item.title = newTitle
try? PersistenceController.shared.container.save(item)
}
func deleteTodoItem(item: TodoItem) {
try? PersistenceController.shared.container.delete(item)
}
import Foundation
let persistenceController = PersistenceController.shared
// Создание новых элементов Todo
createTodoItem(title: "Buy groceries")
createTodoItem(title: "Walk the dog")
// Получение всех элементов Todo
let todoItems = fetchAllTodoItems()
print("All Todo Items:")
todoItems.forEach { print($0.title) }
// Обновление элемента Todo
if let firstItem = todoItems.first {
updateTodoItem(item: firstItem, newTitle: "Buy groceries and cook dinner")
}
// Получение и вывод обновленных элементов
let updatedTodoItems = fetchAllTodoItems()
print("Updated Todo Items:")
updatedTodoItems.forEach { print($0.title) }
// Удаление элемента Todo
if let lastItem = updatedTodoItems.last {
deleteTodoItem(item: lastItem)
}
// Получение и вывод оставшихся элементов
let remainingTodoItems = fetchAllTodoItems()
print("Remaining Todo Items:")
remainingTodoItems.forEach { print($0.title) }
TodoItem
— это модель данных с полями id
, title
и isCompleted
.PersistenceController
управляет контейнером данных и регистрацией модели.createTodoItem
, fetchAllTodoItems
, updateTodoItem
и deleteTodoItem
выполняют основные операции с данными.