2015-04-14 22 views
31

Tôi vừa nâng cấp lên Xcode 6.3 và chúng cung cấp một cái gì đó mới cho Sân chơi. Nếu bạn tạo một sân chơi mới và bạn mở trình điều khiển dự án, bạn sẽ thấy thư mục Sources và bên trong có một tệp "SupportCode.swift". Ở đầu tệp đó, nó đọc sốSân chơi Xcode không thể truy cập các tệp nhanh trong thư mục Nguồn

This file (and all other Swift source files in the Sources directory 
of this playground) will be precompiled into a framework which is 
automatically made available to <PLAYGROUND_NAME>.playground. 

Tôi đã thử đặt chức năng vào đó và không có sẵn cho sân chơi của tôi. Tôi đang làm gì sai? Tôi có phải tự biên dịch tệp SupportCode.swift theo cách thủ công không? Làm sao?

Trả lời

99

Bạn phải thêm công cộng thuộc tính truy cập đến các lớp học, phương pháp và tài sản của bạn trong thư mục nguồn để làm cho họ truy cập từ tập tin sân chơi chính như họ đối xử như mô-đun riêng biệt bởi trình biên dịch

+12

tôi thấy nó thực sự kỳ lạ mà tôi phải thực hiện một lớp công chúng và làm cho hàm init của cộng đồng. – DerrickHo328

+6

sẽ là tuyệt vời nếu chúng tôi có một cái gì đó giống như '@testable import' cho sân chơi – dreamlab

+1

@ Calimari328 Tuyên bố bạn lớp là công khai làm cho nó có thể nhìn thấy bên ngoài, nhưng làm init() là công cộng nó để khởi tạo (tạo trường hợp) từ bên ngoài. Vì vậy, khi bạn muốn cung cấp cho một truy cập vào lớp nhưng đồng thời giới hạn nó là instantiation - bạn khai báo init() là ít nhìn thấy được. Tôi đã đưa ra một ví dụ với Singleton thực hiện - để làm cho nó rõ ràng hơn –

6

Như đã đề cập khi bạn tạo .swift các tệp trong thư mục Nguồn chúng tự động có sẵn cho mã sân chơi của bạn. Để kiểm soát quyền truy cập của các phần khác nhau của tệp này, bạn có thể sử dụng các công cụ sửa đổi cấp truy cập là: public, internal & private.

theo Swift programming language access control

Mức truy cập mặc định trong hầu hết các trường hợp là internal mà tiếp cận bên trong mô-đun, nhưng không phải bên ngoài.

Nói cách khác, nếu bạn khai báo một lớp mà không có công cụ sửa đổi truy cập, bạn có thể truy cập nó từ một tệp khác trong thư mục Nguồn nhưng KHÔNG ở tệp chính của sân chơi. nếu bạn khai báo một lớp với công cụ sửa đổi công khai, bạn có thể truy cập nó trong cả hai trường hợp.

cho việc sử dụng thực tế: chúng ta hãy làm một thực hiện Singleton Thứ nhất: tôi có thể tạo một file mới trong thư mục Source tên 'Singy.swift' với đoạn mã sau:

public class Singy{ 
public var name=""; 
private static var instance:Singy?; 
private init(){ 

} 
public static func getSingy()->Singy{ 
    if Singy.instance==nil{ 
     Singy.instance=Singy(); 
    } 
    return Singy.instance!; 
}} 

Thứ hai: từ sân chơi của tôi

var s1=Singy.getSingy(); var s2=Singy.getSingy(); s1.name="One"; print(s2.name); 

cả hai s1 & s2 tham chiếu cùng một trường hợp nhưng chỉ được tạo trong lớp

12

Sân chơi phù hợp để chạy thử nghiệm. Đặt tất cả mã của bạn vào thư mục Sources và có một lớp 'kiểm tra' có thể truy cập công khai, cho mỗi bài kiểm tra. Sau đó, chạy các bài kiểm tra có thể truy cập công khai từ sân chơi.

playground

Test1.run() 
Testx.run() 
... 

Sources/Test1.swift

public class Test1 {  
    public static func run() { 
    let my_class = MyClass() 
    let result = my_class.do_something() 
    print(result) 
    } 
} 

Sources/MyClass.swift

class MyClass { 
    func do_something() -> String { 
    return "lol" 
    } 
} 
+0

Điều này thực sự là vô giá. Làm thế nào bạn học cách làm điều này? – Confused

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