Есть ли способ уменьшить количество строк кода Swift?

Вероятно, вы получили свое промежуточное программное обеспечение, зарегистрированное в неправильном месте в конвейере. Порядок, в котором вы размещаете свое промежуточное ПО в startup.cs, имеет значение. Например:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.Use(async (context, next) =>
    {
        try
        {
            await next();
        }
        catch (Exception ex)
        {
            context.Response.StatusCode = StatusCodes.Status403Forbidden;

            await context.Response.WriteAsync(ex.Message);
        }
    });

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}

В приведенном выше коде я зарегистрировал промежуточное программное обеспечение, подобное вашему в начале конвейера. ASP.NET Core обрабатывает любые запросы в том порядке, в котором вы их размещаете, поэтому мое собственное промежуточное программное обеспечение будет запускаться сначала для запроса. Однако ответы обрабатываются снизу вверх. Итак, в примере, когда исключение выбрасывается в контроллер (или где угодно), UseDeveloperExceptionPage или UseExceptionHandler сначала получат какое-либо исключение, обработайте его и измените код состояния на 500.

Если мы изменим порядок на это:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.Use(async (context, next) =>
    {
        try
        {
            await next();
        }
        catch (Exception ex)
        {
            context.Response.StatusCode = StatusCodes.Status403Forbidden;

            await context.Response.WriteAsync(ex.Message);
        }
    });

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}

Теперь мы зарегистрировали наш обработчик после встроенного обработчика исключений для запроса, но, что более важно, перед ним для ответа. Таким образом, в этом случае, когда контроллер выдает исключение, наш обработчик поймает его, обработает и изменит код состояния на то, что мы хотим. Другие обработчики исключений не будут видеть исключение (если другой обработчик промежуточного кода не выдает исключение после нас).

0
задан rmaddy 19 January 2019 в 17:19
поделиться

2 ответа

Вы можете уменьшить свой код до чего-то вроде:

let number = Int.random(in: 0 ... 36)
let color = Int.random(in: 1 ... 2)

switch (number, color) {
case (0, _):
    print("The number is 0 and the color is Green!")

case (_, 1):
    print("The number is \(number) and is Red")

case (_, 2):
    print("The number is \(number) and is Black")

default:
    break
}

Теперь, очевидно, на реальном колесе рулетки, цвета и числа не являются независимыми, как предполагает этот код, но это один из способов упростите ваш код, оставив при этом ясное намерение.

0
ответ дан Rob 19 January 2019 в 17:19
поделиться

Весь ваш код может быть таким простым:

let number = Int.random(in: 0 ..< 37)
let color = Int.random(in: 1 ..< 3)

print("The Number is \(number) and the color is \(color == 1 ? "Red" : "Black")")

Вот и все. Нет необходимости в кортеже или в switch.

0
ответ дан rmaddy 19 January 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: