2016-03-29 2 views
1

Я попытался это с CGFloat и я получаю следующее сообщение об ошибке: Не удается вызвать походку со списком аргументов типа «(CGFloat по: CGFloat)»Замена для контура C-типа в Swift 2.2 CGFloat

for var min:CGFloat = 0.0; min<=45.0; min = min+value { 

print("\(min)") 
} 

к:

for min:CGFloat in 0.stride(CGFloat(55.0), by: min+value) { 

    print("\(min)") 
} 
+0

Как насчет '(0.0) .stride (55.0, by: value)'? – trojanfoe

+0

С тех пор, как я вникал в Swift, я писал код школы, а не производственный код, я просто преобразовывался в циклы while, а не изучал синтаксис asinine для «правильного» Swift 'for':' var min: CGFloat = 0.0; while (min <= 45.0) {/*...;*/ min + = значение; } 'Может быть, что-то, чтобы рассмотреть, если это ваш случай использования haha ​​ – abluejelly

+0

ty abluejelly, я попробую это. – Chris

ответ

0
import Foundation 

let fromValue = CGFloat(0.0) 
let toValue = CGFloat(10.0) 
let distance = CGFloat(3.3) 


// stride in interval from 0.0 ..< 10.0, with distance 3.3 

let sequence = fromValue.stride(to: toValue, by: distance) 
print(sequence.dynamicType) 
/* 
StrideTo<CGFloat> 
*/ 

// StrideTo conforms to SequenceType protocol, so we can use for-in 
for element in sequence { 
    print("\(element)") 
} 
/* 
0.0 
3.3 
6.3 
9.9 
*/ 
+0

ty, но я пытаюсь использовать арифметический оператор в шаге (по параметру:), это не поддерживается? – Chris

+0

@ cmarti1138, используя 'by: min + value', не то, что вы намеревались. Вам просто нужно 'by: value'. – trojanfoe

+0

@ cmarti1138 Я обновил свой ответ на примере ... – user3441734

1

Ниже последняя перегрузка походки. Вы можете использовать число для CGFloat для шага.

for min in (0 as CGFloat).stride(to: 55, by: value) { 
    print("\(min)") 
} 

Тем не менее, шаг возвращает рыхлую, когда начинается цикл петли. Значение by не обновляется с помощью итерации for-loop. Для этого случая было бы лучше использовать цикл while,

var min : CGFloat = 0 

while (min < 55) { 
    print("\(min)") 
    min += value 
} 
Смежные вопросы