2016-10-15 4 views
0

Я модернизирую раздвоенный Framework Свифт 3.Как использовать изменяемую переменный в CGFloat удлинению в Swift 3

Рабочей Свифта 2 Кода:

public extension CGFloat { 

    var roundToNearestHalf: CGFloat { 
     return round(self * 2)/2 
    } 
} 

В Swift 3, возвращение бросков compiler error : Cannot use mutating member on immutable value: 'self' is immutable.

Я смог найти множество документов, почему метод Struct должен изменяться. Но пока я не могу найти решение для переменной.

Если я ввожу мутирует ключевое слово, компилятор бросает ошибку: Expected declaration

public extension CGFloat { 

    var roundToNearestHalf: CGFloat mutating { 
     return round(self * 2)/2 
    } 
} 

enter image description here

Мои исследования по этому вопросу, что код, кажется, неуместны - поэтому она должна быть внутри функции.

public extension CGFloat { 

    mutating func roundToNearestHalf() -> CGFloat { 
     var roundToNearestHalf: CGFloat { 
      return round(self * 2)/2 
     } 
    } 
} 

Теперь компилятор жалуется на `*` `

enter image description here

исследований на этот вопрос привел меня к this тему, что предлагает использовать функцию round, как я пытаюсь слишком ,

Поскольку этот код явно работал до Swift 3, я хотел бы знать, почему этого больше нет. Почему var должен быть объявлен как изменяемый сейчас? И как мне нужно объявить var roundToNearestHalf сейчас? Помощь очень ценится.

+0

Вам не нужно (и не можете) отмечать что-либо как 'mutating' - вы просто нужно сказать 'return Darwin.round (self * 2)/2' или' (self * 2) .rounded()/2' – Hamish

+0

'(self * 2) .rounded()/2' сделал это, спасибо вам большое много для вашего efford –

+0

@Hamish не стесняйтесь отвечать –

ответ

2

Неизменяемые вещи, как правило, имеют прошлые имена причастия.

присоединился(), обратный(), округляется() метода, которые поддерживают свободно цепочки

там, где раньше было много свободных функции в настоящее время, которые имели аргумент грамматический в винительном падеже

нравится присоединиться (x), round (x) ... они грамматически выглядят очень похожими, которые округлились, похоже, что это изменит x, хотя это не так. Теперь он делает :)

Теперь все пути более обтекаемым, что это большое изменение API все говорят о :)

+0

Большое спасибо за ваш ответ и объяснение –

+0

Вы очень приветствуетесь :) – yeoman

+0

Для коллекций, которые я пишу, я использую имена плюс, с и без для добавления, размещения, удаления btw. Это не прошлые причастия, но по-прежнему очень ясны в создании новой вещи вместо изменения существующего экземпляра en lieu. – yeoman

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