相关疑难解决方法(0)

如何获得Swift枚举的计数?

如何确定Swift枚举中的个案数?

(我想避免手动枚举所有值,或者尽可能使用旧的" enum_count技巧 ".)

enums count swift

175
推荐指数
12
解决办法
5万
查看次数

什么是Swift相当于 - [NSObject描述]?

在Objective-C中,可以description向其类添加一个方法以帮助调试:

@implementation MyClass
- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@: %p, foo = %@>", [self class], foo _foo];
}
@end
Run Code Online (Sandbox Code Playgroud)

然后在调试器中,您可以执行以下操作:

po fooClass
<MyClass: 0x12938004, foo = "bar">
Run Code Online (Sandbox Code Playgroud)

Swift中的等价物是什么?Swift的REPL输出可能会有所帮助:

  1> class MyClass { let foo = 42 }
  2> 
  3> let x = MyClass()
x: MyClass = {
  foo = 42
}
Run Code Online (Sandbox Code Playgroud)

但我想重写此行为以打印到控制台:

  4> println("x = \(x)")
x = C11lldb_expr_07MyClass (has 1 child)
Run Code Online (Sandbox Code Playgroud)

有没有办法清理这个println输出?我见过Printable协议:

/// This protocol should be adopted by types that wish …
Run Code Online (Sandbox Code Playgroud)

swift

151
推荐指数
7
解决办法
4万
查看次数

在Swift中列出理解

语言指南没有透露列表理解的痕迹.在Swift中实现这一目标的最佳方法是什么?我正在寻找类似的东西:

evens = [ x for x in range(10) if x % 2 == 0]
Run Code Online (Sandbox Code Playgroud)

list-comprehension swift

43
推荐指数
2
解决办法
1万
查看次数

如何在swift中获取枚举的所有值

有没有办法在数组中获取枚举的所有值?

假设我有以下代码:

enum Suit {
    case Spades, Hearts, Diamonds, Clubs
}
Run Code Online (Sandbox Code Playgroud)

是否有方法来获取以下数组?

[Spades, Hearts, Diamonds, Clubs]
Run Code Online (Sandbox Code Playgroud)

swift

31
推荐指数
1
解决办法
2万
查看次数

循环遍历Swift中的枚举值

是否可以在Swift中循环枚举值?或者替代方案是什么?

我正在使用Apple的Swift语言指南,我在枚举上遇到了这个例子.

//  EXPERIMENT
//
//  Add a method to Card that creates a full deck of cards, 
//  with one card of each combination of rank and suit.

struct Card {
    var rank: Rank
    var suit: Suit
    func simpleDescription() -> String {
        return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
    }
}
let threeOfSpades = Card(rank: .Three, suit: .Spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()

enum Suit {
    case Spades, Hearts, Diamonds, Clubs
    func simpleDescription() -> String {
        switch self {
        case .Spades:
            return …
Run Code Online (Sandbox Code Playgroud)

enums loops ios swift

31
推荐指数
1
解决办法
2万
查看次数

Swift枚举字符串和int

我有一种情况,我正在尝试对某些数据进行二进制解码,数据类型同时具有数值和字符串值以及名称.我正在考虑使用如下的枚举:

enum TARGET_TRACK_TYPE : String {
    case TT_INVALID          = "Invalid"
    case TT_TRUE_TRACK_ANGLE = "True Track Angle"
    case TT_MAGNETIC         = "Magnetic"
    case TT_TRUE             = "True"
}
Run Code Online (Sandbox Code Playgroud)

但是我也知道:

TT_INVALID = 0并且TT_TRUE_TRACK_ANGLE = 1,等有没有一种简单的方法来封装这两个"东西"的字符串和数值到枚举结构或做我需要做某种结构的/类来处理呢?

我想我想做点什么

let a = TARGET_TRACK_TYPE.rawValue(value: 2) println(a)

哪个会打印 True Track Angle

同样,我知道这可以用结构或类来完成,但我对枚举特别感兴趣

或者换个例子:

/// Emitter Category is defined in section 3.5.1.10 of the GDL90 Spec
struct EmitterCategory {

let category : Int

func getString() -> String {

    switch(category) {
    case 0:
        return "No aircraft type information"; …
Run Code Online (Sandbox Code Playgroud)

enums swift

20
推荐指数
2
解决办法
1万
查看次数

即使使用相同的swift版本,Xcode 9和Xcode 10也能提供不同的结果

我在xcode 9.3和xcode 10 beta 3游乐场中运行此代码

import Foundation

public protocol EnumCollection: Hashable {
    static func cases() -> AnySequence<Self>
}

public extension EnumCollection {

    public static func cases() -> AnySequence<Self> {
        return AnySequence { () -> AnyIterator<Self> in
            var raw = 0
            return AnyIterator {
                let current: Self = withUnsafePointer(to: &raw) { $0.withMemoryRebound(to: self, capacity: 1) { $0.pointee } }

                guard current.hashValue == raw else {
                    return nil
                }

                raw += 1
                return current
            }
        }
    }
}

enum NumberEnum: EnumCollection{
    case …
Run Code Online (Sandbox Code Playgroud)

xcode swift xcode10

10
推荐指数
1
解决办法
2121
查看次数

通过哈希值访问枚举值?

枚举有一个名为'hashValue'的属性,它是枚举中的索引.

现在我的问题是,是否可以通过使用数字来访问其值?例如:let variable:AnEnum = 0

enums swift

8
推荐指数
2
解决办法
1万
查看次数

从枚举的子部分中选择随机值

给出一个Swift枚举:

enum PerformerPosition: Int {

    case String_Violin1
    case String_Violin2
    case String_Viola
    case String_Cello
    case String_CB

    case Wind_Oboe
    case Wind_Clarinet
    case Wind_Flute
    ...

}
Run Code Online (Sandbox Code Playgroud)

(对于项目的需要,我无法使用嵌套枚举.)我想只选择带String_前缀的枚举值.

到目前为止,我所知道的唯一方法是从所有可用的案例中执行随机枚举值,如下所示:

private static let _count: PerformerPosition.RawValue = {
    // find the maximum enum value
    var maxValue: Int = 0
    while let _ = PerformerPosition(rawValue: maxValue) { 
        maxValue += 1
    }
    return maxValue
}()

static func randomPerformer() -> PerformerPosition {
    // pick and return a new value
    let rand = arc4random_uniform(UInt32(count))
    return PlayerPosition(rawValue: …
Run Code Online (Sandbox Code Playgroud)

enums swift

6
推荐指数
1
解决办法
233
查看次数

如何编写协议扩展以从Swift枚举中获取所有rawValues

我要做的是创建一个协议扩展来从枚举中获取原始值数组.例如,说我有以下内容:

enum TestType: String, EnumIteratable {
    case unitTest = "Unit Test"
    case uiTest = "UI Test"
}

class EnumIterator: NSObject {
    class func iterateEnum<T: Hashable>(_: T.Type) -> AnyGenerator<T>  {
        var i = 0
        return anyGenerator {
            let next = withUnsafePointer(&i) { UnsafePointer<T>($0).memory }
            return next.hashValue == i++ ? next : nil
        }
    }

   class func getValues<T: Hashable>(_: T.Type) -> [T] {
        let iterator = self.iterateEnum(T)
        var returnArray = [T]()
        for val in iterator {
            returnArray.append(val)
        }
        return returnArray
    }

} …
Run Code Online (Sandbox Code Playgroud)

generics enums protocols generator swift

5
推荐指数
1
解决办法
874
查看次数

标签 统计

swift ×10

enums ×6

count ×1

generator ×1

generics ×1

ios ×1

list-comprehension ×1

loops ×1

protocols ×1

xcode ×1

xcode10 ×1