相关疑难解决方法(0)

在Swift中声明并使用位字段枚举

如何在Swift中声明和使用位字段?

声明这样的枚举确实有效,但尝试将OR 2值一起编译失败:

enum MyEnum: Int
{
    case One =      0x01
    case Two =      0x02
    case Four =     0x04
    case Eight =    0x08
}

// This works as expected
let m1: MyEnum = .One

// Compiler error: "Could not find an overload for '|' that accepts the supplied arguments"
let combined: MyEnum = MyEnum.One | MyEnum.Four
Run Code Online (Sandbox Code Playgroud)

我查看了Swift如何导入Foundation枚举类型,它通过定义struct符合RawOptionSet协议的方式来实现:

struct NSCalendarUnit : RawOptionSet {
    init(_ value: UInt)
    var value: UInt
    static var CalendarUnitEra: NSCalendarUnit { get }
    static …
Run Code Online (Sandbox Code Playgroud)

enums bit-fields swift

36
推荐指数
5
解决办法
3万
查看次数

如何在Swift中为SpriteKit定义类别位掩码枚举?

要在Objective-C中定义类别位掩码枚举,我曾经输入:

typedef NS_OPTIONS(NSUInteger, CollisionCategory)
{
    CollisionCategoryPlayerSpaceship = 0,
    CollisionCategoryEnemySpaceship = 1 << 0,
    CollisionCategoryChickenSpaceship = 1 << 1,
};
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现相同的使用Swift?我尝试了枚举,但无法使其正常工作.这是我到目前为止所尝试的.

错误截图

objective-c bit-masks ios sprite-kit swift

28
推荐指数
3
解决办法
2万
查看次数

枚举案例的原始值必须是文字

我有这个枚举:

enum GestureDirection:UInt {
    case Up =       1 << 0
    case Down =     1 << 1
    case Left =     1 << 2
    case Right =    1 << 3
}
Run Code Online (Sandbox Code Playgroud)

但在每种情况下我都会收到错误:

枚举案例的原始值必须是文字

我不懂.

Swift 1.2,Xcode 6.3.2

ios swift

25
推荐指数
4
解决办法
2万
查看次数

没有'|' 候选人产生预期的上下文结果类型'NSTextStorageEditActions'

我浏览了raywenderlich.com上的Text Kit Tutorial和该行

edited(.EditedCharacters | .EditedAttributes, range: range, changeInLength: (str as NSString).length - range.length)
Run Code Online (Sandbox Code Playgroud)

产生以下错误:

No '|' candidates produce the expected contextual result type 'NSTextStorageEditActions'
Run Code Online (Sandbox Code Playgroud)

当我将第一个参数更改为时,错误消失了:

edited(.EditedCharacters, range: range, changeInLength: (str as NSString).length - range.length)
Run Code Online (Sandbox Code Playgroud)

我也试过用"OR"和"||" 没有任何成功.

Swift 2.2和iOS 9.2

ios swift

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

Swift 2.0日历组件错误

嗨,我在swift 2.0中遇到此错误

无法使用类型'(NSCalendarUnit,fromDate:NSDate?,toDate:NSDate?,options:nil)的参数列表调用'components'

var hoy = dataFormatter.stringFromDate(NSDate())
        var despues = dataFormatter.stringFromDate(fecha)
        var calHoy = dataFormatter.dateFromString(hoy)
        var calcDesp = dataFormatter.dateFromString(despues)
        let cal = NSCalendar.currentCalendar()
        let unit:NSCalendarUnit = .Day
        let components = cal.components(unit, fromDate: calcDesp, toDate: calHoy, options: nil) 
Run Code Online (Sandbox Code Playgroud)

nscalendar ios swift

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

如何在Swift字符串中找到最后一个子字符串?

在Objective-C我用过:

[@"abc def ghi abc def ghi" rangeOfString:@"c" options:NSBackwardsSearch];
Run Code Online (Sandbox Code Playgroud)

但现在NSBackWardsSearch似乎不存在.任何人都可以提供Swift的等效代码吗?

如果可能的话,我希望能够在整个字符串中找到字符编号.所以在上面的例子中它将返回3.

string substring swift

16
推荐指数
3
解决办法
1万
查看次数

在OS X版本10.10中不推荐使用'YearCalendarUnit':改为使用NSCalendarUnitYear

我的代码:

 let calendar = NSCalendar.currentCalendar()
 let dateComponents = calendar.components(NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.DayCalendarUnit, fromDate: self)
Run Code Online (Sandbox Code Playgroud)

我的错误:

'YearCalendarUnit' was deprecated in OS X version 10.10: Use NSCalendarUnitYear instead
'MonthCalendarUnit' was deprecated in OS X version 10.10: Use NSCalendarUnitMonth instead
'DayCalendarUnit' was deprecated in OS X version 10.10: Use NSCalendarUnitDay instead
Run Code Online (Sandbox Code Playgroud)

但我不能键入NSCalendarUnitYear以及(NSCalendarUnitMonth/NSCalendarUnitDay)有什么问题?

macos ios swift

9
推荐指数
1
解决办法
2852
查看次数

在 Swift 中使用 SpriteKit 时 PhysicsBody 为零

我有一个正在构建的 SpriteKit 游戏,我正在从多维数组加载一个关卡。loadlevel 函数第一次工作。如果我做了它失败printlnphysicsBody上述physicsBody分配(在physicBody初始化后)。当我第二次删除所有瓷砖时removeChildrenInArray,我运行 load level 它会抛出一个错误fatal error: unexpectedly found nil while unwrapping an Optional,说它指向下面的正println下方的行。并且println表明它physicsBodynil。在我看来,没有理由重新初始化PhysicsBody应该是nil。该println打印physicsBody nil。我不知道为什么physicsBody会是nil. 我只是想通过删除所有块节点并根据级别图在原始位置添加新节点来重置级别。

func loadLevel() {
    var levels = Levels().data
    var frameSize = view.frame.size
    var thisLevel = levels[currentLevel]
    println("running load level")
    for (rowIndex,row) in enumerate(thisLevel) {
        for (colIndex,col) in enumerate(row) {
            if col == 4 { …
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit skspritenode swift

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

如何在Swift中创建自定义UIControlEvent?

我正在创建一个自定义UI元素,并希望触发自定义UIControlEvent.我已经发现,有一个范围ApplicationReserved.

遗憾的是,这不起作用,因为它"不符合协议'RawRepresentable':

enum MyCustomEvents : UIControlEvents{
  case Increase = 0x01000000
  case Decrease = 0x02000000
}
Run Code Online (Sandbox Code Playgroud)

两个问题:
1)这是自定义事件的正确方法吗?
2)如何正确定义自定义事件?

谢谢!

custom-controls user-interaction ios uicontrolevents swift

3
推荐指数
2
解决办法
1758
查看次数

Swift 中的 Objective-C NS_OPTIONS

NS_OPTIONS在 Objective-C 中给出了一个定义:

typedef NS_OPTIONS(NSInteger, MyType) {
   MyTypeOption1 = 1 << 0,
   MyTypeOption2 = 1 << 1,
   MyTypeOption3 = 1 << 2,
   // etc
}
Run Code Online (Sandbox Code Playgroud)

我正在将此类型导入 Swift,但无法形成位字段。

let default : MyType = MyTypeOption1 | MyTypeOption2
Run Code Online (Sandbox Code Playgroud)

错误:

Protocol 'BinaryInteger' requires that 'MyType' conform to 'BinaryInteger'
Run Code Online (Sandbox Code Playgroud)

IDE 表明问题出在常设冒号按位或运算符。

改变NS_OPTIONS声明或用 Swift 声明新类型OptionSet不是……选项。我怎样才能让 Swift 打球?

objective-c bit-fields swift

-2
推荐指数
1
解决办法
912
查看次数