小编msz*_*aro的帖子

将Objective-C属性显式导入Swift作为选项

更新:从Xcode 6.3开始,现在可以通过可空性注释实现.

我一直想知道是否有人想出一种方法将Obj-C属性显式导入Swift作为可选项.

问题

考虑以下ObjC类:

@interface Foo : NSObject
@property (strong, nonatomic) NSObject* potentiallyNil;
@end
Run Code Online (Sandbox Code Playgroud)

这很好,但是当你在Swift中使用它时,Xcode倾向于将属性导入为正确的实例或作为隐式展开的可选项.

我已经看到这两个都进来了

class Foo : NSObject {
var potentiallyNil : NSObject
}
Run Code Online (Sandbox Code Playgroud)

以及

class Foo : NSObject {
var potentiallyNil : NSObject!
}
Run Code Online (Sandbox Code Playgroud)

现在这里有问题 - 在Swift中,你现在遇到了这个丑陋的问题,即知道你的属性可能是零,但必须避免隐式可选转换的美妙.您将选择以下选项之一:

明确的零检查......

if(potentiallyNil == nil) {
  bar()
}
Run Code Online (Sandbox Code Playgroud)

或者手动转换为带有展开的可选类型 - 也很难看......

let manuallyWrappedPotentiallyNil : NSObject? = potentiallyNil
if let unwrapped = manuallyWrappedPotentiallyNil {
   bar();
}
Run Code Online (Sandbox Code Playgroud)

这两者似乎都不太理想.在我看来,必须有一个方法来解决这个问题!事实上,正如@matt指出的那样,Apple在整个测试版中都做到了这一点,同时"审核可选的合规性".我们可以这样做吗?

问题

归结为:给定ObjC属性

@property (strong, nonatomic) NSObject* potentiallyNil;
Run Code Online (Sandbox Code Playgroud)

有没有办法使这个签名导入到Swift

var potentiallyNil …
Run Code Online (Sandbox Code Playgroud)

objective-c ios swift

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

Oracle:来自SELECT的INSERT值... JOIN,SQL错误:ORA-00947:值不够

我正在尝试执行以下操作:

INSERT INTO MyTable(a, b, c)
SELECT a FROM source1
JOIN source2 ON ...
Run Code Online (Sandbox Code Playgroud)

其中source2包含B列和C列.

但是Oracle似乎并不喜欢这样,并且告诉我"SQL错误:ORA-00947:没有足够的值".

我在这里做错了吗?这种语法甚至可能吗?或者我必须将其重写为:

SELECT a, b, c FROM source1, source2 WHERE ....
Run Code Online (Sandbox Code Playgroud)

谢谢!

oracle join insert ora-00947

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

标签 统计

insert ×1

ios ×1

join ×1

objective-c ×1

ora-00947 ×1

oracle ×1

swift ×1