EasySwift iOS🍏
3.03K subscribers
269 photos
8 videos
394 links
ВсС самоС интСрСсноС Π² ΠΌΠΈΡ€Π΅ iOS Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ πŸ§‘πŸ»β€πŸ’»

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ: @EasySwiftBot

По всСм вопросам ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ @itereznikov
Download Telegram
Calculating the semantic distance between words with the Natural Language framework

Natural Language framework позволяСт ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с чСловСчСским языком, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСкстовыС Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ словами ΠΈ Ρ„Ρ€Π°Π·Π°ΠΌΠΈ.

Класс NLEmbedding позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ пространство, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ строки прСдставлСны Π² Π²ΠΈΠ΄Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΈ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ сСмантичСскоС расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ словами, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ синонимы.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ тСкст Π½Π° смысловыС связи ΠΈΠ»ΠΈ созданиС Ρ‡Π°Ρ‚ Π±ΠΎΡ‚ΠΎΠ² с Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹ΠΌΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ Π½Π° запросы.


import NaturalLanguage

func getSemanticDistance(for word: String, in language: NLLanguage) {

// 1. Create the embedding for the language the word belongs to
if let embedding = NLEmbedding.wordEmbedding(for: language) {

// 2. Find the neighbors for the word
embedding.enumerateNeighbors(for: word, maximumCount: 10) { neighbor, distance in

// 3. Acces the neighbor distance from the word
print("\(neighbor): \(distance)")

return true
}
}
}
πŸ”₯3❀2πŸ‘2
Faster iOS Networking with Shared Dictionary Compression

Π‘Π΅Ρ‚Π΅Π²Ρ‹Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° Π½Π° iOS устройствах, ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ этой ситуации являСтся использованиС shared dictionary compression.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ shared dictionary compression?

Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ сТатия, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (словаря), Ρ‡Ρ‚ΠΎ позволяСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ запросов.

ИспользованиС shared dictionary compression ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, особСнно для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ со слабыми ΠΈΠ»ΠΈ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌΠΈ сСтСвыми соСдинСниями.

Однако, стоит ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Π΅Π· Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ со стороны бСкэнда данная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° 🫒
πŸ‘5🀯1
ΠšΠΎΡ€Π·ΠΈΠ½Π° Π² Π”ΠΎΠ΄ΠΎ ΠŸΠΈΡ†Ρ†Π΅ Π½Π° iOS 14: Π±Π°Π³ Π΄Π»ΠΈΠ½ΠΎΠΉ Π² ΠΏΠΎΠ»Π³ΠΎΠ΄Π°

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π°Ρ история фикса Π±Π°Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»Π³ΠΎ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ.
Иногда, Π΄Π°ΠΆΠ΅ самыС Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ Π±Π°Π³ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ слабыС мСста Π² ΠΊΠΎΠ΄Π΅. А с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ оси ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΈ Π² самых Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… мСстах.

Π‘Π°ΠΌΠ° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° простая: послС Ρ€Π΅Π΄ΠΈΠ·Π°ΠΉΠ½Π° прилоТСния Π”ΠΎΠ΄ΠΎ ΠŸΠΈΡ†Ρ†Ρ‹, ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ стала Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° iOS 14, вызывая ΠΆΠ°Π»ΠΎΠ±Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ стоимости ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ². И фикс Π±Ρ‹Π» Π² ΠΏΠ°Ρ€Ρƒ строк 🫣
πŸ‘5❀1πŸ‘Ž1πŸ€”1🀬1
Beginner’s Guide to Protocol Buffers and gRPC with Swift

ΠžΡ‚Π»ΠΈΡ‡Π½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ Protocol Buffer ΠΈΠ»ΠΈ Β«protobufΒ», Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ основныС особСнности Π΅Π³ΠΎ использования ΠΈ gRPC.
Π’Π°ΠΊΠΆΠ΅ Π°Π²Ρ‚ΠΎΡ€ описываСт ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ шаги ΠΏΠΎ настройкС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра gRPC Π² Swift с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Swift Protobuf ΠΈ gRPC, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ созданиС структур Π΄Π°Π½Π½Ρ‹Ρ… Swift, созданиС интСрфСйса gRPC ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ интСрфСйса Π½Π° сторонС сСрвСра.
ΠšΡΡ‚Π°Ρ‚ΠΈ, для сСти ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ async/await.

func completeTodo(
request: ServerRequest<Todos_TodoID>,
context: ServerContext
) async throws -> ServerResponse<Todos_Todo> {
guard
var todo = todos.first(where: { $0.todoID == request.message.todoID })
else {
return .init(
error: RPCError.init(
code: .notFound,
message: "Todo not found."
)
)
}
todo.completed = true
todos = todos.filter { $0.todoID != request.message.todoID }
todos.append(todo)
return .init(message: todo)
}
πŸ”₯4
Азартная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° iOS прилоТСния ΠΈΠ³Ρ€Ρ‹ 2048 с ChatGPT

ОбъСмная ΠΈ подробная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚Π½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ с ChatGPT извСстной ΠΈΠ³Ρ€Ρ‹ 2048.

Π’Π°ΠΊΠΆΠ΅ Π² ΠΈΠ³Ρ€Ρƒ вводится Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт: ИИ - Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±Ρ‹Π»ΠΈ взяты Π΄Π²Π°: Monte Carlo ΠΈ Expectimax

ВсС достаточно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описано ΠΈ сопровоТдаСтся ΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ количСством ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ΠΎΠ².
πŸ”₯4
Why Do View Controllers Need init(coder:)?

Класс UIViewController ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» NSCoding, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° init(coder:), Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ создании view controllers ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ UIStoryboards, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² процСссС создания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ NSCoding для воссоздания состояния view controller ΠΈ Π΅Π³ΠΎ прСдставлСний.
πŸ”₯2πŸ‘Ž1
Swift TaskGroup Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…

Если Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² особСнностях примСнСния TaskGroup ΠΈ Ρ‡Π΅ΠΌ ΠΎΠ½Π° отличаСтся ΠΎΡ‚ Task ΠΈ async let, Ρ‚ΠΎ эта ΡΡ‚Π°Ρ‚ΡŒΡ для вас.

ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΡΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования TaskGroup для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹Ρ… тасок, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок, ΠΎΡ‚ΠΌΠ΅Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ автоматичСская ΠΎΡ‚ΠΌΠ΅Π½Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Π·Π°Π΄Π°Ρ‡.

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с AsyncStream.
❀4πŸ”₯3🀬1
How Do Binaries work together? What breaks ABI?

Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π²ΡƒΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΊ API (интСрфСйс программирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ), Ρ‚Π°ΠΊ ΠΈ ABI (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ интСрфСйс ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ). ИзмСнСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΡ… ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ ABI.

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ достаточно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описан процСсс Ρ€Π°Π±ΠΎΡ‚Ρ‹ ABI/API ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ измСнСния Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ.
πŸ”₯2
Π’Π°ΠΊΡ‚ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ Π² ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… прилоТСниях: Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°Ρ‡Π΅ΠΌ?

Π’Π°ΠΊΡ‚ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ β€” это использованиС Π²ΠΈΠ±Ρ€Π°Ρ†ΠΈΠΉ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ взаимодСйствиС с ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ прилоТСниями.

РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ для подтвСрТдСния дСйствий, сигнализации ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π²Π²ΠΎΠ΄Π° ΠΈ Π² ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… прилоТСниях для создания ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΏΡ‹Ρ‚Π°. Π’Π°ΠΊΡ‚ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ощущСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’Π°ΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‡Ρ‘Ρ‚ΠΊΡƒΡŽ связь ΠΌΠ΅ΠΆΠ΄Ρƒ дСйствиСм ΠΈ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡ‚ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ощущСния экономно ΠΈ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ систСмных настройках устройства.
❀3πŸ”₯2
How to Use URLSession with Async/Await for Network Requests in Swift

URLSession позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сСтСвыС запросы с использованиСм async/await, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… дСкодирования Π² структуру.

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° выполнСния GET ΠΈ POST запросов, Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ JSON ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ошибками для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… HTTP ΠΊΠΎΠ΄ΠΎΠ².

var urlComponents = URLComponents(string: "https://httpbin.org/get")!

/// Define the parameters.
let parameters: [String: String] = [
"name": "Antoine van der Lee",
"age": "33"
]

/// Add the query parameters to the URL.
urlComponents.queryItems = parameters.map { key, value in
URLQueryItem(name: key, value: value)
}

/// Ensure we have a valid URL and throw a URLError if it fails.
guard let url = urlComponents.url else {
throw URLError(.badURL)
}

/// Use URLSession to fetch the data asynchronously.
let (data, response) = try await URLSession.shared.data(from: url)
πŸ”₯5
Some vs Any

Apple совСтуСт Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с some ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ any Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаях, ΠΊΠΎΠ³Π΄Π° Π½Π΅ трСбуСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ.

some Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ any позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠ΅Π½Π΅Π΅ строгим.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΊΠ°ΠΊ opaque, existential, boxed ΠΈ type erasure, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎ мнСнию Π°Π²Ρ‚ΠΎΡ€Π° ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ сути.
πŸ”₯10
Automatic Trait Tracking

Π’ iOS 18 UIKit автоматичСски отслСТиваСт доступ ΠΊ свойствам, устраняя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎΠ± измСнСниях свойств.

АвтоматичСскоС отслСТиваниС поддСрТиваСтся Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… обновлСния ΠΌΠ°ΠΊΠ΅Ρ‚Π°, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ layoutSubviews(), updateViewConstraints() ΠΈ draw(CGRect) для UIView, Π° Ρ‚Π°ΠΊΠΆΠ΅ viewWillLayoutSubviews() ΠΈ updateConfiguration для UIViewController ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π² классС UIView автоматичСски измСняСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ рисуСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² зависимости ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡˆΡ€ΠΈΡ„Ρ‚Π° доступности(dynamic type) Π±Π΅Π· нСобходимости Ρ€ΡƒΡ‡Π½ΠΎΠΉ рСгистрации ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
πŸ”₯3
The Case Against [unowned self]

Π’ Swift ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ссылок: strong, weak ΠΈ unowned. Π‘ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ссылки ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти, слабыС ссылки ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ†ΠΈΠΊΠ»Ρ‹ удСрТания, Π° unowned ссылки ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ дольшС, Ρ‡Π΅ΠΌ ссылка.

Unowned ссылки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² ситуациях с большим количСством ссылок, Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π°, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°. Однако ΠΈΡ… использованиС Π² простых случаях, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ замыкания, Π½Π΅ рСкомСндуСтся.

ИспользованиС unowned ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ Π² систСмах с высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ остороТности.
πŸ”₯7
This media is not supported in your browser
VIEW IN TELEGRAM
Integrating Live Activity and Dynamic Island in iOS: A Complete Guide

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΠΈ подробная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ использованиС Live Activities ΠΈ Dynamic Island.
Π’Π°ΠΊΠΈΠ΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ‚ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ прилоТСниям ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π° экранС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π° Dynamic Island прСдоставляСт ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ для ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части экрана.

Live Activities ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ Π΄ΠΎ 8 часов, Π° ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ 4 ΠšΠ‘. Π’Π°ΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ рСкомСндациям ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ.

Для добавлСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Live Activity Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ iOS Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Info.plist, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΊΠ»ΡŽΡ‡ 'Supports Live Activities'.
πŸ”₯7
MainActor usage in Swift explained to dispatch to the main thread

MainActor β€” это Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°ΠΊΡ‚ΠΎΡ€ Π² Swift 5.5, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, обСспСчивая ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

ИспользованиС @MainActor ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄, устраняя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² мноТСствСнных Π²Ρ‹Π·ΠΎΠ²Π°Ρ… DispatchQueue.main.async ΠΈ оптимизируя ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, выполняя Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ нСобходимости.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ @MainActor, Π½Π΅ всСгда Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Ссли ΠΎΠ½ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ синхронно ΠΈΠ· Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, функция Π²ΠΈΠ΄Π°:
func fetchImage(for url: URL, completion: @escaping (Result<UIImage, Error>) -> Void) {
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data, let image = UIImage(data: data) else {
DispatchQueue.main.async {
completion(.failure(ImageFetchingError.imageDecodingFailed))
}
return
}

DispatchQueue.main.async {
completion(.success(image))
}
}.resume()
}


ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² Ρ‚Π°ΠΊΡƒΡŽ:
@MainActor
func fetchImage(for url: URL) async throws -> UIImage {
let (data, _) = try await URLSession.shared.data(from: url)
guard let image = UIImage(data: data) else {
throw ImageFetchingError.imageDecodingFailed
}
return image
}
πŸ‘6
Об Π°Π½Π°Ρ‚ΠΎΠΌΠΈΠΈ ΠΊΡ€ΡΡˆΠ΅ΠΉ Π½Π° iOS Β«ΠΏΠΎ-взрослому»

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΠΈ подробная Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ возникновСния ΠΊΡ€ΡΡˆΠ΅ΠΉ Π½Π° iOS, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ошибки Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (Ρ‚Π°ΠΌ Π½Π° самом Π΄Π΅Π»Π΅ всС Β«ΠΏΠΎ-взрослому» 🫣)
Автор Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ со старта прилоТСния ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ сигналов ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ диагностики ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, приводящиС ΠΊ сбоям.

Достаточно ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ Ρ‡Ρ‚ΠΈΠ²ΠΎ πŸ€“
πŸ”₯6πŸ‘1
Π”Π΅Π±Π°Π³ Π½Π° максимум: сСкрСтныС настройки Xcode, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π² iOS Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ понимания Ρ€Π°Π±ΠΎΡ‚Ρ‹ CPU ΠΈ GPU, Π° Ρ‚Π°ΠΊΠΆΠ΅ использования Π΄Π΅Π±Π°Π³-инструмСнтов для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’ Xcode доступны настройки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Slow Animations, Graphics Quality Override ΠΈ Simulate Memory Warning, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. ВнСэкранная отрисовка ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ GPU - Π΅Ρ‘ стоит ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ слоСв.

ОбъСмная ΠΈ полСзная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π² iOS.
πŸ”₯5
ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² iOS: ΠΊΠ°ΠΊ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ прилоТСния ΠΈ Π½Π΅ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ ΠΌΠΎΠ·Π³ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠ°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ, Π³Π΄Π΅ ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌ Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½Ρ‹ отличия основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡ многопоточности.

Если ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, Ρ‚ΠΎ всСго Ρ‚Ρ€ΠΈ:
- GCD (Grand Central Dispatch)
- Operation Queue
- Swift Concurrency

Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎ Β«ΠΊΠΎΡ€ΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΒ» Π±Π΅Π· погруТСния Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ.
Но, каТСтся, ΠΌΡ‹ всС Π΅Ρ‰Π΅ Π΄ΠΎΠ»Π³ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ gcd πŸ₯²
❀‍πŸ”₯6
This media is not supported in your browser
VIEW IN TELEGRAM
Working with Natural Language framework

Π― ΡƒΠΆΠ΅ скидывал ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΎΠ±Π·ΠΎΡ€Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Natural Language. Однако, ΠΌΠΈΠΌΠΎ этой Π½Π΅ смог ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΌΠΈΠΌΠΎ.

ΠžΡ‡Π΅Π½ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ возмоТностями этого Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с MeshGradient, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ доступСн с 18 iOS, для создания ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²ΠΎΠ³ΠΎ ΠΈ красивого интСрфСйса 😲.
ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ для Ρ‡Π΅Π³ΠΎ это Π½ΡƒΠΆΠ½ΠΎ πŸ˜…
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ”₯3😁2
Animate UIKit views with SwiftUI animations in iOS 18

Π’ iOS 18 Π·Π°Π²Π΅Π·Π»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΉ SwiftUI для UIkit.

На самом Π΄Π΅Π»Π΅ ΠΊΡ€ΡƒΡ‚ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π° SwiftUI ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΡ‚Ρ‹Ρ… Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΉ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ.
ДСлаСтся довольно просто:

class ViewController: UIViewController {
...

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.startAnimating()
}

private func startAnimating() {
let animation = SwiftUI.Animation
.linear(duration: 1.3)
.repeatForever()

UIView.animate(animation) { [weak self] in
self?.animatingView?.transform = .init(scaleX: 2, y: 2)
}
}
}

ΠŸΡ€Π°Π²Π΄Π° ΠΎΠ΄Π½ΠΎ Π½ΠΎ: Π½Π΅ всС ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС Π°ΠΏΠ½ΡƒΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π΄ΠΎ 18 🫠
πŸ”₯8