2014-11-10 15 views
5
var cellHeights: [CGFloat] = [CGFloat]() 

if let height = self.cellHeights[index] as? CGFloat { 
    self.cellHeights[index] = cell.frame.size.height 
} else { 
    self.cellHeights.append(cell.frame.size.height) 
} 

Tôi cần kiểm tra xem liệu một phần tử tại một chỉ mục được chỉ định có tồn tại hay không. Tuy nhiên các mã trên không làm việc, tôi nhận được lỗi build:Swift, kiểm tra xem mảng có giá trị tại chỉ số

Conditional downcast from CGFloat to CGFloat always succeeds

Tôi cũng thử với:

if let height = self.cellHeights[index] {} 

nhưng điều này cũng đã thất bại:

Bound value in a conditional binding must be of Optional type 

Bất kỳ ý tưởng whats sai?

Trả lời

8

cellHeights là mảng chứa tùy chọn CGFloat. Vì vậy, bất kỳ phần tử nào của nó không thể là nil, như vậy nếu chỉ mục tồn tại, phần tử trên chỉ mục đó là CGFloat.

gì bạn đang cố gắng làm điều gì đó có thể chỉ là nếu bạn tạo một mảng của optionals:

var cellHeights: [CGFloat?] = [CGFloat?]() 

và trong trường hợp đó các ràng buộc bắt buộc nên được sử dụng như sau:

if let height = cellHeights[index] { 
    cellHeights[index] = cell.frame.size.height 
} else { 
    cellHeights.append(cell.frame.size.height) 
} 

Tôi khuyên bạn nên đọc lại về Optionals

Các vấn đề liên quan