Skip to content

get ToString description from native#91

Merged
teach310 merged 6 commits intodevelopfrom
feature/foundation_description
Nov 26, 2023
Merged

get ToString description from native#91
teach310 merged 6 commits intodevelopfrom
feature/foundation_description

Conversation

@teach310
Copy link
Copy Markdown
Owner

@teach310 teach310 commented Nov 26, 2023

Description

Swift 側で print した時の結果を Unity 側で取得できるようにする。

NSObject と AnyObject を分けている理由

NSObject と Swift クラスの出力形式は異なっている。

NSObject

<CBMutableCharacteristic: 0x2c54b6f00 UUID = EA521290-A651-4FA0-A958-0CE73F4DAE55, Value = (null), Properties = 0x1, Permissions = 0x1, Descriptors = (null), SubscribedCentrals = ()>

<クラス名: アドレス 中身>

のフォーマット

このアドレスはアンマネージドなオブジェクトのメモリアドレスだが、Unity側から見るとマネージドなオブジェクトのアドレスのように見えてしまう。
そこで、NSObject では正規表現を用いてアドレス部分を削除している。

中身がない場合

クラス名返す。Swift の挙動と同じ

クラスがネストする場合。

service: CBMutableService: Primary = YES, UUID = 068C47B7-FC04-4D47-975A-7952BE1A576F, Included Services = (null), Characteristics = (
    "<CBMutableCharacteristic: 0x2a199b5f0 UUID = E3737B3F-A08D-405B-B32D-35A8F6C64C5D, Value = (null), Properties = 0x16, Permissions = 0x3, Descriptors = (null), SubscribedCentrals = (\n)>"

アドレスは表示されてします。
ここの対応は手間なため許容
変えたければ上書きすれば良い。

Test

SampleDebug シーンを使ってどんな値が出力されるか確認した。

teach310 added 4 commits November 26, 2023 15:19
Swift 側で print した時の結果を Unity 側で取得できるようにする。

## NSObject と AnyObject を分けている理由

NSObject と Swift クラスの出力形式は異なっている。

NSObject

```
<CBMutableCharacteristic: 0x2c54b6f00 UUID = EA521290-A651-4FA0-A958-0CE73F4DAE55, Value = (null), Properties = 0x1, Permissions = 0x1, Descriptors = (null), SubscribedCentrals = ()>
```

<クラス名: アドレス 中身>

のフォーマット

このアドレスはアンマネージドなオブジェクトのメモリアドレスだが、Unity側から見るとマネージドなオブジェクトのアドレスのように見えてしまう。
そこで、NSObject では正規表現を用いてアドレス部分を削除している。

## 中身がない場合

クラス名返す。Swift の挙動と同じ

## クラスがネストする場合。

```
service: CBMutableService: Primary = YES, UUID = 068C47B7-FC04-4D47-975A-7952BE1A576F, Included Services = (null), Characteristics = (
    "<CBMutableCharacteristic: 0x2a199b5f0 UUID = E3737B3F-A08D-405B-B32D-35A8F6C64C5D, Value = (null), Properties = 0x16, Permissions = 0x3, Descriptors = (null), SubscribedCentrals = (\n)>"
```

アドレスは表示されてします。
ここの対応は手間なため許容
変えたければ上書きすれば良い。
any_object_get_descriptionのほうがより適切かもしれないため迷っているが、csharp 寄りの命名にする

## print で出す文言

https://developer.apple.com/documentation/swift/string/init(describing:)-67ncf

## ラップしたクラスの出力
CustomStringConvertible を用いて上書き

https://developer.apple.com/documentation/swift/customstringconvertible

description 直呼びは非推奨とあるが、Stringのコンストラクタを使う場合 Optional から取り出す必要があるため楽さを優先
CBPeripheralManager, CBCentralManager等のクラス名しか表示されなかったものに関しては ToString を定義していない
teach310 added 2 commits November 26, 2023 15:30
properties や permissions が数値になってむしろ読みづらくなっているが、必要であれば自分で中身をLogにだせば良いだけのため、
ここで綺麗にする必要はあまりないと判断。
@teach310 teach310 merged commit 965c262 into develop Nov 26, 2023
@teach310 teach310 deleted the feature/foundation_description branch November 26, 2023 06:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant