Làm thế nào để tạo một biến toàn cục?


123

Tôi có một biến toàn cục cần được chia sẻ giữa các ViewControllers của tôi.

Trong Objective-C, tôi có thể định nghĩa một biến tĩnh, nhưng tôi không thể tìm thấy cách xác định một biến toàn cục trong Swift.

Bạn có biết một cách để làm điều đó?


một câu trả lời trên đây stackoverflow.com/questions/24868120/...
Steve Rosenberg


bạn có thể xác định biến hoặc cấu trúc bên ngoài lớp, sau đó bạn có thể truy cập biến đó trong ứng dụng tổng thể.
Chandni

Câu trả lời:


209

Từ hướng dẫn lập trình Swift chính thức :

Biến toàn cục là những biến được định nghĩa bên ngoài bất kỳ ngữ cảnh hàm, phương thức, bao đóng hoặc kiểu nào. Các hằng và biến toàn cục luôn được tính toán một cách lười biếng.

Bạn có thể xác định nó trong bất kỳ tệp nào và có thể truy cập nó hiện tại ở modulebất kỳ đâu. Vì vậy, bạn có thể xác định nó ở đâu đó trong tệp bên ngoài phạm vi bất kỳ. Không cần thiết staticvà tất cả các biến toàn cục được tính toán một cách lười biếng.

 var yourVariable = "someString"

Bạn có thể truy cập điều này từ bất kỳ đâu trong mô-đun hiện tại.

Tuy nhiên, bạn nên tránh điều này vì các biến Toàn cục không tốt cho trạng thái ứng dụng và chủ yếu là lý do lỗi.

Như được hiển thị trong câu trả lời này , trong Swift, bạn có thể gói gọn chúng trong structvà có thể truy cập ở bất cứ đâu. Bạn cũng có thể xác định các biến tĩnh hoặc hằng số trong Swift. Gói gọn trongstruct

struct MyVariables {
    static var yourVariable = "someString"
}

Bạn có thể sử dụng biến này trong bất kỳ lớp nào hoặc bất kỳ đâu

let string = MyVariables.yourVariable
println("Global variable:\(string)")

//Changing value of it
MyVariables.yourVariable = "anotherString"

3
Bạn struct được gọi MyVariables, vì vậy MyViewStatetrông giống như một sao chép / dán lỗi từ stackoverflow.com/a/24868789/1187415 :)
Martin R

Cảm ơn Martin R. yes i đã sao chép mã từ nó
codester

9
Nếu bạn sao chép mã từ một câu trả lời khác thì bạn nên trình bày rõ ràng điều đó (với liên kết đến câu trả lời gốc). So sánh stackoverflow.com/help/referencing .
Martin R

1
Hiểu rồi, Cảm ơn! Nhưng có sự khác biệt nào giữa biến toàn cục và đóng gói trong cấu trúc không?
czzhengkw

3
"MyVariables" sẽ không được coi là toàn cầu? Làm thế nào nó tạo ra sự khác biệt nếu chúng ta khai báo nó là cấu trúc toàn cục hoặc biến?
Satyam

15

Các biến toàn cục được xác định bên ngoài bất kỳ phương thức hoặc sự đóng nào có thể bị hạn chế phạm vi bằng cách sử dụng từ khóa private.

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"

32
Hằng số ("let") không phải là một biến.
Mike Taverne

2
@MikeTaverne Bạn nói đúng nhưng bạn có thể giới thiệu nó là "var" thì câu trả lời này sẽ OK. swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia

4

nếu bạn muốn sử dụng nó trong tất cả các lớp học của mình, bạn có thể sử dụng:

public var yourVariable = "something"

nếu bạn chỉ muốn sử dụng trong một lớp, bạn có thể sử dụng:

var yourVariable = "something"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.