小编kid*_*d_x的帖子

确定核心数据模型中何时存在新版本

简短的问题:

我想在我的核心数据模型发生变化(新实体,新属性等)时在我的应用程序中运行某些代码.如何确定模型是否已更改?

只是一些伪代码:

    if (current_model_version != previous_model_version) {
    //do some code
    } else {
    // do some other code
    }
Run Code Online (Sandbox Code Playgroud)

我猜我可能会使用versionHashes来执行此操作,或者isConfiguration:compatibleWithStoreMetadata:,但我不确定如何操作.

为清晰起见进行了一些编辑:"现在"和"上一次"中的"当前"和"上一次启动应用程序"一样.

database model core-data version ios

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

可以将空数组转换为任何类型的数组

似乎Swift中的空数组可以转换为任何数组类型.

请参阅以下示例:

var obj = [Int]()

// compiler warns that this cast always fails, but this evaluates to true
print(obj is [String]) 

obj.append(3)

// This evaluates to false as expected
print(obj is [String])
Run Code Online (Sandbox Code Playgroud)

这在操场上很容易验证,但也会在编译的代码中发生.这是一个已知的问题?

arrays casting swift

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

使用--getopts拾取整个单词标记

可以使用getopts拾取全字标志吗?

如下所示:

while getopts ":abc --word" opt; do
    case ${opt} in
        a) SOMETHING
            ;;
        ...
        --word) echo "Do something else."
            ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

试图拿起那些双破折号。

unix bash getopts

4
推荐指数
3
解决办法
5486
查看次数

UnsafeMutablePointer.pointee和didSet属性

我在我创建的结构中的一个观察属性上使用UnsafeMutablePointer得到了一些意想不到的行为(在Xcode 10.1,Swift 4.2上).请参阅以下游乐场代码:

struct NormalThing {
    var anInt = 0
}

struct IntObservingThing {
    var anInt: Int = 0 {
        didSet {
            print("I was just set to \(anInt)")
        }
    }
}

var normalThing = NormalThing(anInt: 0)
var ptr = UnsafeMutablePointer(&normalThing.anInt)
ptr.pointee = 20
print(normalThing.anInt) // "20\n"

var intObservingThing = IntObservingThing(anInt: 0)
var otherPtr = UnsafeMutablePointer(&intObservingThing.anInt)
// "I was just set to 0."

otherPtr.pointee = 20
print(intObservingThing.anInt) // "0\n"
Run Code Online (Sandbox Code Playgroud)

看起来,将UnsafeMutablePointer上的指针修改为观察到的属性实际上并不会修改属性的值.此外,将指针指向属性的操作会触发didSet操作.我在这里错过了什么?

pointers swift unsafemutablepointer

4
推荐指数
1
解决办法
97
查看次数