在我的Objective-C项目中,我经常使用全局常量文件来存储通知名称和键等内容NSUserDefaults.它看起来像这样:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
Run Code Online (Sandbox Code Playgroud)
我如何在Swift中做同样的事情?
假设枚举或结构在实例中不存储任何值,则它们是静态的.静态枚举和静态结构之间有什么区别吗?
enum StaticEnum {
static var someStaticVar = 0
static func someStaticFunc() {}
}
struct StaticStruct {
static var someStaticVar = 0
static func someStaticFunc() {}
}
Run Code Online (Sandbox Code Playgroud) 看起来当需要使用enum(字符串类型)时,也可以使用struct使用静态字段来实现.
例如
enum Test: String {
case TestCase1
case TestCase2
case TestCase3
}
Run Code Online (Sandbox Code Playgroud)
要么
struct Test {
static let TestCase1 = "TestCase1"
static let TestCase2 = "TestCase2"
static let TestCase3 = "TestCase3"
}
Run Code Online (Sandbox Code Playgroud)
枚举方法何时优先于另一方,反之亦然?
如果我有以下枚举:
enum FruitTuple
{
static let Apple = (shape:"round",colour:"red")
static let Orange = (shape:"round",colour:"orange")
static let Banana = (shape:"long",colour:"yellow")
}
Run Code Online (Sandbox Code Playgroud)
然后我有以下功能:
static func PrintFruit(fruit:FruitTuple)
{
let shape:String = fruit.shape
let colour:String = fruit.colour
print("Fruit is \(shape) and \(colour)")
}
Run Code Online (Sandbox Code Playgroud)
在fruit.shape和fruit.colour我得到错误:
Value of type 'FruitTuple' has no member 'shape'
很公平,所以我改变枚举有一个类型:
enum FruitTuple:(shape:String, colour:String)
{
static let Apple = (shape:"round",colour:"red")
static let Orange = (shape:"round",colour:"orange")
static let Banana = (shape:"long",colour:"yellow")
}
Run Code Online (Sandbox Code Playgroud)
但是在枚举声明中我得到了错误:
Inheritance from non-named type '(shape: String, …
作为 Swift 的新手,这就是我发现的:
enum HttpMethod {
static let post = "POST"
static let get = "GET"
}
// can assign to string property.
request.httpMethod = HttpMethod.post // --> "POST"
Run Code Online (Sandbox Code Playgroud)
阅读本文后,使用无壳enum而不是无壳的原因对struct我来说很有意义,但这不是我在这里感兴趣的事情。
拥有强大的 C# 背景,这就是我实现它的方式:
enum HttpMethod: String {
case post = "POST"
case get = "GET"
}
// I'd even consider this alternatively:
enum HttpMethod: String {
case post
case get
}
// Must retrieve string value
request.httpMethod = HttpMethod.post.rawValue // --> "POST" or "post" …Run Code Online (Sandbox Code Playgroud) 我想知道你是否可以在swift中创建类似于C#中的静态类,即一个无法实例化的类,它只能有静态函数和静态属性.这些类型的课程是否可以迅速实现?
如果没有,考虑到Swift中可用的工具,重建这种设计模式的最有效方法是什么?
我想用静态方法构建一个服务对象.我应该在这种情况下使用struct或class或enum吗?有什么区别?可能会影响编译时间?可能它会以某种方式影响速度?我知道结构对于实例更快.但它如何影响这种情况呢?
你的意见?你体验过吗?
谢谢.
struct/class/enum Linker {
public static func skypeCall(contact:String) {
//...
}
public static func phoneCall(phoneNumber:String) {
//...
}
public static func openWebPage(url:String) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)