จะสร้างตัวแปรส่วนกลางได้อย่างไร?


123

ฉันมีตัวแปรส่วนกลางที่ต้องแชร์ระหว่าง ViewControllers ของฉัน

ใน Objective-C ฉันสามารถกำหนดตัวแปรแบบคงที่ได้ แต่ฉันหาวิธีกำหนดตัวแปรส่วนกลางใน Swift ไม่ได้

คุณรู้วิธีการทำหรือไม่?


หนึ่งคำตอบที่นี่stackoverflow.com/questions/24868120/…
Steve Rosenberg

อาจซ้ำกันได้ของHow to create global variable ใน Swift?
Ni Nisan Nijackle

คุณสามารถกำหนดตัวแปรหรือโครงสร้างนอกคลาสจากนั้นคุณจะสามารถเข้าถึงตัวแปรนั้นในแอปพลิเคชันโดยรวม
Chandni

คำตอบ:


209

จากโปรแกรม Swift อย่างเป็นทางการ คู่มือ :

ตัวแปรส่วนกลางคือตัวแปรที่กำหนดไว้นอกฟังก์ชันวิธีการปิดหรือบริบทประเภทใด ๆ ค่าคงที่และตัวแปรทั่วโลกมักจะคำนวณอย่างเฉื่อยชา

คุณสามารถกำหนดเป็นไฟล์ใดก็ได้และสามารถเข้าถึงได้moduleทุกที่ในปัจจุบัน ดังนั้นคุณสามารถกำหนดไว้ที่ใดที่หนึ่งในไฟล์นอกขอบเขตใดก็ได้ ไม่จำเป็นต้องมีstaticและตัวแปรทั่วโลกทั้งหมดถูกคำนวณอย่างเฉื่อยชา

 var yourVariable = "someString"

คุณสามารถเข้าถึงได้จากทุกที่ในโมดูลปัจจุบัน

อย่างไรก็ตามคุณควรหลีกเลี่ยงสิ่งนี้เนื่องจากตัวแปร Global ไม่ดีต่อสถานะแอปพลิเคชันและสาเหตุหลักมาจากข้อบกพร่อง

ดังที่แสดงไว้ในคำตอบนี้ใน Swift คุณสามารถห่อหุ้มไว้structและเข้าถึงได้ทุกที่ คุณสามารถกำหนดตัวแปรคงที่หรือค่าคงที่ใน Swift ได้เช่นกัน ห่อหุ้มstruct

struct MyVariables {
    static var yourVariable = "someString"
}

คุณสามารถใช้ตัวแปรนี้ในคลาสใดก็ได้หรือที่ใดก็ได้

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

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

3
โครงสร้างของคุณถูกเรียกว่าMyVariablesดังนั้นMyViewStateดูเหมือนข้อผิดพลาดในการคัดลอก / วางจากstackoverflow.com/a/24868789/1187415 :)
Martin R

ขอบคุณ Martin R. ใช่ฉันได้คัดลอกรหัสจากมัน
codester

9
หากคุณคัดลอกโค้ดจากคำตอบอื่นคุณควรระบุอย่างชัดเจน (พร้อมลิงก์ไปยังคำตอบเดิม) เปรียบเทียบstackoverflow.com/help/referencing
Martin R

1
เข้าใจแล้วขอบคุณ! แต่มีความแตกต่างระหว่าง global variable และ encapsulate ใน struct หรือไม่?
czzhengkw

3
"MyVariables" จะไม่ถูกพิจารณาว่าเป็นสากลหรือไม่ มันสร้างความแตกต่างได้อย่างไรถ้าเราประกาศเป็น global struct หรือ variable?
Satyam

15

ตัวแปรส่วนกลางที่กำหนดไว้ภายนอกวิธีการหรือการปิดสามารถถูก จำกัด ขอบเขตได้โดยใช้คีย์เวิร์ดส่วนตัว

import UIKit

// MARK: Local Constants

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

32
ค่าคงที่ ("let") ไม่ใช่ตัวแปร
Mike Taverne

2
@MikeTaverne คุณพูดถูก แต่สามารถแนะนำเป็น "var" ได้แล้วคำตอบนี้จะใช้ได้ swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia

4

หากคุณต้องการใช้ในทุกชั้นเรียนของคุณคุณสามารถใช้ได้:

public var yourVariable = "something"

หากคุณต้องการใช้ในคลาสเดียวคุณสามารถใช้ได้:

var yourVariable = "something"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.