2016-05-23 27 views
5

Tôi đang cố gắng tạo vòng lặp nhưng dường như không hiểu cách loại bỏ lỗi nàyToán tử nhị phân '.. <' không thể áp dụng cho toán hạng kiểu 'Int' và 'CGFloat'

mã của tôi:

for i:CGFloat in 0 ..< 2 + self.frame.size.width/(movingGroundTexture.size().width) { 
     let sprite = SKSpriteNode(texture: movingGroundTexture) 
     sprite.zPosition = 0 
     sprite.anchorPoint = CGPointMake(0, 0) 
     sprite.position = CGPointMake(i * sprite.size.width, 0) 
     addChild(sprite) 
    } 

lỗi này là trên for dòng trên self.frame.size.width(movingGroundTexture.aize().width)

+2

Theo như tôi biết toán tử phạm vi nửa mở (.. <) không hoạt động với các giá trị nguyên nguyên nào cả. – vadian

Trả lời

10

Bạn không thể tạo CountableRange (hoặc CountableClosedRange) với các loại điểm động.

Bạn có thể muốn chuyển đổi của bạn 2 + self.frame.size.width/movingGroundTexture.size().width một Int:

for i in 0 ..< Int(2 + self.frame.size.width/movingGroundTexture.size().width) { 
    // i is an Int  
} 

Hoặc bạn muốn sử dụng stride (Swift 2 cú pháp):

for i in CGFloat(0).stride(to: 2 + self.frame.size.width/movingGroundTexture.size().width, by: 1) { 
    // i is a CGFloat 
} 

Swift 3 cú pháp:

for i in stride(from: 0, to: 2 + self.frame.size.width/movingGroundTexture.size().width, by: 1) { 
    // i is a CGFloat 
} 

Phụ thuộc vào việc bạn có cần độ chính xác của dấu phẩy động hay không. Lưu ý rằng nếu giới hạn trên của bạn là giá trị không tách rời, phiên bản stride sẽ lặp lại một lần nữa so với phiên bản toán tử phạm vi, do thực tế là Int(...) sẽ bỏ qua thành phần phân đoạn.

5

Bạn cần phải chuyển đổi phía bên phải của dãy núi này để một kiểu số nguyên, như Int hoặc UInt:

for i in 0 ..< Int(2 + self.frame.size.width/(movingGroundTexture.size().width)) { 
    ... 
} 
Các vấn đề liên quan