use*_*028 322 objective-c ios swift
在我的Objective-C项目中,我经常使用全局常量文件来存储通知名称和键等内容NSUserDefaults.它看起来像这样:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
Run Code Online (Sandbox Code Playgroud)
我如何在Swift中做同样的事情?
Fra*_*scu 739
IMO处理这种常量的最好方法是创建一个Struct.
struct Constants {
static let someNotification = "TEST"
}
Run Code Online (Sandbox Code Playgroud)
然后,例如,在您的代码中将其称为:
print(Constants.someNotification)
Run Code Online (Sandbox Code Playgroud)
编辑:如果你想要一个更好的组织,我建议你使用分段子结构
struct K {
struct NotificationKey {
static let Welcome = "kWelcomeNotif"
}
struct Path {
static let Documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
static let Tmp = NSTemporaryDirectory()
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用例如 K.Path.Tmp
LC *_*C 웃 102
我很晚才参加聚会.
无论在这里我是如何管理常量文件的,这样在使用swift编写代码时对开发人员更有意义.
FOR URL:
//URLConstants.swift
struct APPURL {
private struct Domains {
static let Dev = "http://test-dev.cloudapp.net"
static let UAT = "http://test-UAT.com"
static let Local = "192.145.1.1"
static let QA = "testAddress.qa.com"
}
private struct Routes {
static let Api = "/api/mobile"
}
private static let Domain = Domains.Dev
private static let Route = Routes.Api
private static let BaseURL = Domain + Route
static var FacebookLogin: String {
return BaseURL + "/auth/facebook"
}
}
Run Code Online (Sandbox Code Playgroud)
对于CUSTOMFONTS:
//FontsConstants.swift
struct FontNames {
static let LatoName = "Lato"
struct Lato {
static let LatoBold = "Lato-Bold"
static let LatoMedium = "Lato-Medium"
static let LatoRegular = "Lato-Regular"
static let LatoExtraBold = "Lato-ExtraBold"
}
}
Run Code Online (Sandbox Code Playgroud)
适用于APP中使用的所有密钥
//KeyConstants.swift
struct Key {
static let DeviceType = "iOS"
struct Beacon{
static let ONEXUUID = "xxxx-xxxx-xxxx-xxxx"
}
struct UserDefaults {
static let k_App_Running_FirstTime = "userRunningAppFirstTime"
}
struct Headers {
static let Authorization = "Authorization"
static let ContentType = "Content-Type"
}
struct Google{
static let placesKey = "some key here"//for photos
static let serverKey = "some key here"
}
struct ErrorMessage{
static let listNotFound = "ERROR_LIST_NOT_FOUND"
static let validationError = "ERROR_VALIDATION"
}
}
Run Code Online (Sandbox Code Playgroud)
对于颜色常数:
//ColorConstants.swift
struct AppColor {
private struct Alphas {
static let Opaque = CGFloat(1)
static let SemiOpaque = CGFloat(0.8)
static let SemiTransparent = CGFloat(0.5)
static let Transparent = CGFloat(0.3)
}
static let appPrimaryColor = UIColor.white.withAlphaComponent(Alphas.SemiOpaque)
static let appSecondaryColor = UIColor.blue.withAlphaComponent(Alphas.Opaque)
struct TextColors {
static let Error = AppColor.appSecondaryColor
static let Success = UIColor(red: 0.1303, green: 0.9915, blue: 0.0233, alpha: Alphas.Opaque)
}
struct TabBarColors{
static let Selected = UIColor.white
static let NotSelected = UIColor.black
}
struct OverlayColor {
static let SemiTransparentBlack = UIColor.black.withAlphaComponent(Alphas.Transparent)
static let SemiOpaque = UIColor.black.withAlphaComponent(Alphas.SemiOpaque)
static let demoOverlay = UIColor.black.withAlphaComponent(0.6)
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将这些所有文件包装在Xcode项目中名为Constants的公共组中.
还有更多观看此视频
Ant*_*nio 28
虽然我更喜欢@Francescu的方式(使用带静态属性的结构),但您也可以定义全局常量和变量:
let someNotification = "TEST"
Run Code Online (Sandbox Code Playgroud)
但请注意,与局部变量/常量和类/结构属性不同,全局变量是隐式延迟的,这意味着它们在第一次访问时会被初始化.
建议阅读:全局变量和局部变量以及Swift中的全局变量不是变量
Kir*_*ela 20
Constant.swift
import Foundation
let kBaseURL = NSURL(string: "http://www.example.com/")
Run Code Online (Sandbox Code Playgroud)
ViewController.swift
var manager = AFHTTPRequestOperationManager(baseURL: kBaseURL)
Run Code Online (Sandbox Code Playgroud)
Wil*_*ken 19
考虑枚举.这些可以在逻辑上分解为单独的用例.
enum UserDefaultsKeys: String {
case SomeNotification = "aaaaNotification"
case DeviceToken = "deviceToken"
}
enum PhotoMetaKeys: String {
case Orientation = "orientation_hv"
case Size = "size"
case DateTaken = "date_taken"
}
Run Code Online (Sandbox Code Playgroud)
当您处于互斥选项的情况时,会发生一个独特的好处,例如:
for (key, value) in photoConfigurationFile {
guard let key = PhotoMetaKeys(rawvalue: key) else {
continue // invalid key, ignore it
}
switch (key) {
case.Orientation: {
photo.orientation = value
}
case.Size: {
photo.size = value
}
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,您将收到编译错误,因为您尚未处理该情况PhotoMetaKeys.DateTaken.
Chi*_*buZ 14
或者只是在GlobalConstants.swift中:
import Foundation
let someNotification = "aaaaNotification"
Run Code Online (Sandbox Code Playgroud)
像其他人一样,提到在课堂外宣布的任何事物都是全
你也可以创建单身人士:
class TestClass {
static let sharedInstance = TestClass()
// Anything else goes here
var number = 0
}
Run Code Online (Sandbox Code Playgroud)
任何时候你想要使用这个类的东西,你可以写:
TestClass.sharedInstance.number = 1
Run Code Online (Sandbox Code Playgroud)
如果您现在println(TestClass.sharedInstance.number)从项目的任何位置进行书写,则会打印1到日志中.这适用于各种对象.
tl; dr:任何时候你想让类中的所有内容都是全局的,添加static let sharedInstance = YourClassName()到类中,并使用前缀来解决类的所有值YourClassName.sharedInstance
也可以使用无大小写枚举。
优点 - 它们不能被实例化。
enum API {
enum Endpoint {
static let url1 = "url1"
static let url2 = "url2"
}
enum BaseURL {
static let dev = "dev"
static let prod = "prod"
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我在Swift项目
1中所做的工作:创建新的Swift文件
2:在其中创建结构和静态常量。
3:对于使用,只需使用YourStructName.baseURL
注意:创建初始化后花费的时间很少,因此它将在2-5秒后显示在其他视图控制器中。
import Foundation
struct YourStructName {
static let MerchantID = "XXX"
static let MerchantUsername = "XXXXX"
static let ImageBaseURL = "XXXXXXX"
static let baseURL = "XXXXXXX"
}
Run Code Online (Sandbox Code Playgroud)
小智 5
为了在我的应用程序中使用全局常量,我在单独的Swift文件中执行以下操作:
import Foundation
struct Config {
static let baseURL = "https://api.com"
static APIKeys {
static let token = "token"
static let user = "user"
}
struct Notifications {
static let awareUser = "aware_user"
}
}
Run Code Online (Sandbox Code Playgroud)
它很容易使用,并且可以像这样到处调用:
print(Config.Notifications.awareUser)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150852 次 |
| 最近记录: |