2016-06-28 3 views
-2

Когда можно писать многострочные выражения в swift?Многострочные выражения в swift

До сих пор я столкнулся с проблемой с цепью свойств над многостроками.

// is it possible to write this statement over multilines, can you split after or before a dot? 
return self.anObject.varx(a: true, b: false).vary.varz.veryLongVariableName 
+0

Расщепление линии перед точкой должно быть возможным. Можете ли вы представить пример с самообслуживанием, демонстрирующий проблему? –

+0

Плохо, я привык к расщеплению после операторов. Как с запросами LINQ. Ослепленное разбиение перед точкой, мое плохое. – BARJ

ответ

2

Просто сломайте линию перед точкой. Я пишу этот код на других языках каждый день.

class Foo { 
    var bar: Foo { 
     return self 
    } 

    var veryLongNameVariable: Foo { 
     return self 
    } 

    func method(i: Int, _: Int) -> Foo { 
     return self 
    } 
} 

let f = Foo() 
let f2 = f 
    .bar 
    .method(3, 4) 
    .bar 
    .bar 
    .method(0, 2) 
    .veryLongNameVariable 
    .veryLongNameVariable 

print(f2) 
1

Комментарий может быть несколько строк, если она распространяется на следующую строку без вас ударять ввести (или добавление новой строки).

Самое легкое место, где вы можете попасть в новую строку в реальном коде, находится внутри скобок/скобок между операторами с разделителями-запятыми. Заявления могут быть разбиты больше, фактически изменяя код, но больше ничего не приходит прямо на ум.

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

Любая проблема, с которой вы на самом деле сталкиваетесь, не имеет ничего общего с несколькими строками, если вы на самом деле достаточно долго, чтобы получить предупреждение о том, что его слишком сложно вычислить. Это предупреждение всегда можно было устранить, просто разделив код на несколько частей. Кто-нибудь хочет, чтобы 1 линия составляла 200 символов?

let object = self.anObject 
let varx = object(a: true, 
    b: false) 
let vary = varx.vary 
let varz = vary.varz 
let longName = varz.veryLongVariableName 
return longName 
+0

Именно поэтому я задал вопрос, все о читаемости. Имейте 80 колонок. Интересно, можете ли вы связать свойства по нескольким линиям. Но вы не можете, раскалывание над выражением let является хорошим решением. Благодарю. – BARJ

+0

I max разделить его, включая новую строку в объявлении varx. Таким образом я бы не привязал все свойства объекта. Просто делайте это в той степени, в которой вы считаете наиболее читаемым, я полагаю. У некоторых есть нормы по норме для их расщепления, но в конце концов это все, что вы или ваши команды предпочитаете. – Sethmr

1

Вы можете разделить выражение!

Когда вы разбиваете выражение через несколько строк, помнить всегда ставить точку на новой линии:

let s = "" 
s.capitalizedString 
    .capitalizedString 
    .capitalizedString 
    .capitalizedString 
    .capitalizedString 
    .capitalizedString 
    .capitalizedString 
    .capitalizedString 
    .capitalizedString 
    .capitalizedString 
    .capitalizedString 

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

var s = "" 
s.capitalizedString. 
    capitalizedString. 
    capitalizedString. 
    capitalizedString. 
    capitalizedString. 
    capitalizedString. 
    capitalizedString. 
    capitalizedString. 
    capitalizedString. 
    capitalizedString. 
    capitalizedString 

Другое дело, что вы можете сделать, это включить линию упаковки в Xcode:

enter image description here

Это будет выглядеть следующим образом:

enter image description here

Смежные вопросы