Pull to refresh
  • by relevance
  • by date
  • by rating

Устройство компилятора Swift. Часть 3

e-legion corporate blog Programming *Compilers *Swift *Software

Продолжаем изучать компилятор Swift. Эта часть посвящена Swift Intermediate Language.


Если вы не видели предыдущие, рекомендую перейти по ссылке и прочитать:


Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 4.1K
Comments 1

Создаем свои функции в SIL

Atlassian *
Tutorial
Всем привет!

В этой статье я хочу рассказать, как создать свою функцию в SIL.

Вступление


SIL расшифровывается, как Simple Issue Language, был создан разработчиками компании cPrime для автоматизации ручных действий в Atlassian Jira и Confluence.

Основное преимущество SIL заключается в том, что SIL содержит функции, которые не требуют знания API Atlassian Jira или Atlassian Confluence для их использования. Это значительно снижает порог вхождения в SIL и делает программный код на SIL меньше по объему, нежели аналогичный код на Java или Groovy.
Читать дальше →
Total votes 2: ↑2 and ↓0 +2
Views 1.8K
Comments 0

Таблица в Atlassian Confluence на основе данных из REST запроса

Atlassian *
Tutorial
Привет!

В этой статье я расскажу, как сделать страницу в Atlassian Confluence с таблицей, данные в которую будут приходить из REST запроса.

Мы сделаем страницу в Confluence с таблицей, которая будет содержать данные о проектах в Jira. Эти данные мы будем получать из Jira при помощи метода project из стандартного Jira REST API.

Вы можете посмотреть видео по этой статье вот здесь.
Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Views 5.4K
Comments 0

Confusing extensions in Swift

Development for iOS *Swift *Development for MacOS *Development for Linux *
Sandbox
This post is a little bit the information aggregator. If you find a mistake, you could write to me about it I really appreciate that. Have a nice read.

Example with JSONDecoder


What would happen if we run the following piece of code?

struct Test<T>: Codable where T: Codable {
    enum CodingKeys: String, CodingKey {
        case value
    }
    
    let value: T
    let info: String
}

extension Test {
    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        self.value = try container.decode(T.self, forKey: .value)
        self.info = "Default init(from decoder:)"
    }
}

extension Test where T == String {
    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        self.value = try container.decode(T.self, forKey: .value)
        self.info = "Custom init(from decoder:)"
    }
}

let data = #"{"value":"Hello, World!"}"#.data(using: .utf8)!
let object = try? JSONDecoder().decode(Test<String>.self, from: data)
print(object.debugDescription)

Try thinking for 5 seconds about the result.

The result
Optional(
    Test<String>(
        value: "Hello, World!", 
        info: "Default init(from decoder:)"
    )
)


Read more →
Rating 0
Views 882
Comments 0