でNILは、私は、次のスイフトクラスを持っているで:スイフト4:XCodeの9ベータ:静的ファクトリメソッドのObjective-Cは、デバッガで有効なオブジェクトを生成するが、コード
class VideoFaceDetectionController: UIViewController, IPVideoEmbedderControlDelegate {
var videoPlayer: IPVideoEmbedderControl? // Note, not a weak reference
...
そしてIは、対物における方法を有します(参照静的ライブラリにおける)-C:generatePlayer()、次のように
+ (IPVideoEmbedderControl*)generatePlayer
{
IPVideoEmbedderControl* control = [IPLoad
objectWithClass:[IPVideoEmbedderControl class]
fromBundle:[NSBundle bundleWithIdentifier:videoFrameworkBundleID]];
control.provider = [IPVideoPlaybackFactory getProvider];
[control createEmbeddingView];
return control;
}
私のようなので、スイフト4でそれを呼び出す:
videoPlayer? = IPVideoEmbedderControl.generatePlayer()
videoPlayer?.translatesAutoresizingMaskIntoConstraints = false;
今私は2番目の行(translatesAuto ....)にブレークポイントを置き、videoPlayerを検査します。 それはNILです。
は、今私は、コンソールにPO IPVideoEmbedderControl.generatePlayer()を行い、それは偶数フレームがあること、有効なインスタンスを生成します。それでは、どのようそれはそれは、デバッガにすることができ
(lldb) po IPVideoEmbedderControl.generatePlayer()
▿ Optional<IPVideoEmbedderControl>
(lldb) po IPVideoEmbedderControl.generatePlayer().description
"<IPVideoEmbedderControl: 0x7faf88c19390; baseClass = UIControl; frame = (0 0; 320 349); autoresize = W+H; layer = <CALayer: 0x60c0002265c0>>"
を有効なオブジェクトが生成されて返されますが、コードでは同じ正確なメソッドからNIL値が返されますか?
iPad Air 2(iOS 11)シミュレータでXcode Beta 9.0(Release 5)を使用しています。現在iOS 11は稼働していないため、物理デバイスを確認することはできません。
それはありがとうございました。コード内で多くの割り当てを行うと思うには、疑問符をどこにでも置くことができ、警告なしで無言のno-opを得ることができます。私は彼らがこれを防ぐべきだと思う。彼らは型の安全性と明示的性を高めようとしていますが、これはObjective-Cのnilインスタンスに対するサイレントノーオペレーションと同等です。初心者ミス。ありがとう。 – Alex
@Alex、いくつかの警告があるはずです。私はあなたがこのような間違いを犯す唯一の人だとは思わない。 (なぜこの回答をすぐに書くことができるか推測します...)[swift.orgにバグレポートを書く](https://bugs.swift.org/)。 – OOPer