2014-06-10 21 views
6

Tôi chỉ tự hỏi tại sao tôi không thể làm điều gì đó như thế này trực thuộc Tuyên Lớp của tôi trong Swift:Vấn đề với Swift Tuyên bố

let width = 200.0 
let height = 30.0 

let widthheight = width-height 

tôi không thể tạo một hằng số với 2 hằng số khác. Nếu tôi sử dụng điều này bên trong một chức năng/phương pháp tất cả mọi thứ hoạt động tốt.

Cảm ơn

+0

Bạn gặp phải lỗi gì? nó hoạt động ở đây. – Mani

+0

tốt hơn để đọc https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-XID_1 –

+0

@Mani The OP có nghĩa là nó ** bên trong một lớp **. –

Trả lời

11

Khi bạn viết let widthheight = width - height, điều này có nghĩa là mặc nhiên let widthheight = self.width - self.height. Trong Swift, bạn chỉ đơn giản là không được phép sử dụng self cho đến khi tất cả các thành viên của nó đã được khởi tạo - ở đây, bao gồm widthheight.

Bạn phải linh hoạt hơn một chút trong một phương pháp init, tuy nhiên, nơi bạn có thể viết những điều như thế này:

class Rect { 

    let width = 200.0 
    let height = 30.0 
    let widthheight: Double 
    let widthheightInverse: Double 

    init() { 
     // widthheightInverse = 1.0/widthheight // widthheight not usable yet 
     widthheight = width - height 
     widthheightInverse = 1.0/widthheight // works 
    } 

} 
-2

Đối với những thứ như thế, bạn có thể tận dụng các biến lớp. Mã này sẽ trông như thế này:

class var width = 200.0 
class var height = 30.0 
class var widthheight = width - height 

Nhưng khi bạn thử nó, bạn sẽ thấy một lỗi biên dịch:

Class variables are not yet supported

Tôi đoán họ đã không được thực hiện có tính năng được nêu ra. Nhưng có một giải pháp cho bây giờ. Chỉ cần di chuyển tờ khai của bạn ngoài việc khai báo lớp, như sau:

let width = 200.0 
let height = 30.0 
let widthheight = width - height 

class YourClass { ... 
+1

Tôi nghĩ rằng bạn đang trộn lẫn các khái niệm khác nhau hoàn toàn không giải quyết được vấn đề của OP. –

+0

Thực hành tốt là sử dụng các biến và lớp tĩnh (lớp) bằng nhiều ngôn ngữ. Và nó giải quyết vấn đề của OP mà không ghi đè bất kỳ phương pháp nào. – Adam

+1

Nếu OP đang cố gắng mô hình các trường/thuộc tính của một đối tượng: các trường tĩnh/lớp không thích hợp và không phải là các biến toàn cầu. –

1

Đây là một ứng cử viên cho một tài sản tính như vậy:

class Foo { 
    let width = 200.0 
    let height = 30.0 
    var widthheight : Double { return width - height } 
} 

Bạn có thể nâng cao một vấn đề 'nhưng nó được tính mỗi lần'; có lẽ ứng dụng của bạn sẽ phụ thuộc vào một phép trừ đơn được thực hiện nhiều lần - nhưng không có khả năng. Nếu phép trừ là một vấn đề, hãy đặt widthheight trong init()

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