iOS14.8 や iOS15.0 のアップデートで起こっていた
「アップデート準備中…」で固まったまま、プログレスバーの進捗が止まる現象。
「iOS15.1」へのアプデでも、また当たり前のように発生しました!
iOS14.8 や iOS15.0 のアップデートで起こっていた
「アップデート準備中…」で固まったまま、プログレスバーの進捗が止まる現象。
「iOS15.1」へのアプデでも、また当たり前のように発生しました!
DOTweenを使用してロジックを組んでいた所、以下の警告が出て気になりました。
DOTWEEN ► This Tween has been killed and is now invalid
すでにTweenの再生が終了しているものに対して、DOTween APIを使用すると発生するようです。
if (tween != null && tween.IsPlaying()) // ここで警告が出ている { tween.Complete(); }
上記のような場合、tweenがもう再生済みでKillされているにも関わらず
「IsPlaying()」がコールされた事で警告が発生します。
if (tween != null && tween.IsActive() && tween.IsPlaying()) { tween.Complete(); }
というように「IsActive()」を追加する事で警告なしでTweenがすでに無効化されているかを確認できます。
公式ドキュメントにも、以下のように記載されているので、意図した挙動となっています。
Returns FALSE if the tween has been killed.
例えば、
"なにがし".IsNullOrEmpty()
で、引数の文字列が「nullまたは空」なら「true」を返すというメソッドがありますが、
都度、 「string.IsNullOrEmpty」 と記述されるのは長ったらしいので、
"なにがし".IsNullOrEmpty()
といった書き方でも同様の処理ができるようにしたい時、拡張メソッドで実現可能です。
上記のように「既存の型」に対して、「新しい機能を追加」できる概念を「拡張メソッド」といいます。
string a = "123"; string b = null; Console.WriteLine( $"{a.IsNullOrEmpty()}/{b.IsNullOrEmpty()}" );```shell > false/true
こんな感じで、文字列の後ろにメソッドを書く感じにします。
基本的に 「public staticなクラス」 の中に
「public staticなメソッド」 を作って
「最初の引数の頭にthisというキーワードをつける」 だけでOKです。
実際に書いてみます。
public static class StringUtility { public static bool IsNullOrEmpty( this string str ) { return string.IsNullOrEmpty(str) } }
これだけです。
追加した拡張メソッドを使って処理を書くと、以下のようになります。
Console.WriteLine( $"{"ABC".IsNullOrEmpty()} ); // false string test = null; Console.WriteLine( $"{test.IsNullOrEmpty()} ); // true
“ABC” も文字列リテラルのstring扱いなので、
(今回のメソッドでは、ほぼ無意味ですが)そのまま拡張メソッドを使用可能です。
こうする事で、「thisを付けた型」の変数の後ろに「ドット 拡張メソッド名」の形式で呼べるようになります。
ちなみに、「クラス名」「メソッド名」「thisの後ろの型」「thisの後ろの変数名」は任意に付けられますので、
必ず上記サンプルの名前でなくてはならないという事ではない点は、抑えておきましょう。
色々、応用が聞くので自分なりの拡張メソッドで開発を効率化しましょう!
let num:number = Number("12345")
What‽ Your browser did something unexpected. Please try again. If the error continues, try disabling all browser extensions or using a different browser. Please contact us if the problem persists.
ArgumentException: The Object you want to instantiate is null. UnityEngine.Object.CheckNullArgument (System.Object arg, System.String message)
public class YourClass : MonoBehaviour{public YourClass() {var dest = Instantiate( sourcePrefab );}}
public class YourClass : MonoBehaviour{private void Awake() {var dest = Instantiate( sourcePrefab );}}