Compare commits
32 Commits
Author | SHA1 | Date |
---|---|---|
![]() |
1d851afe32 | |
![]() |
74ca73795a | |
![]() |
b383042509 | |
![]() |
56e817669f | |
![]() |
442077e218 | |
![]() |
0d3e7b7572 | |
![]() |
7867c44a27 | |
![]() |
cfba9b6be2 | |
![]() |
c6901ba7a1 | |
![]() |
0994741b7c | |
![]() |
2310c2403c | |
![]() |
876ccf1699 | |
![]() |
f6489f866a | |
![]() |
b5c59a7424 | |
![]() |
dd1899c8e0 | |
![]() |
1b1d613950 | |
![]() |
52ad7d6ad4 | |
![]() |
1cebb9c91c | |
![]() |
591e090925 | |
![]() |
5c09825119 | |
![]() |
5d4787383a | |
![]() |
6cef14c59d | |
![]() |
eef9eb0cb5 | |
![]() |
8675b37473 | |
![]() |
b252405083 | |
![]() |
d72ae256da | |
![]() |
cd57781dd3 | |
![]() |
28da84c16c | |
![]() |
39c03c3e17 | |
![]() |
7b4f896c16 | |
![]() |
efa5c5e980 | |
![]() |
da0abce59d |
|
@ -1 +1 @@
|
|||
2.7.4
|
||||
3.0.6
|
||||
|
|
|
@ -21,7 +21,7 @@ final class PlaybackViewController: UIViewController {
|
|||
override func viewWillAppear(_ animated: Bool) {
|
||||
logger.info("viewWillAppear")
|
||||
super.viewWillAppear(animated)
|
||||
(view as? NetStreamDrawable)?.attachStream(rtmpStream)
|
||||
(view as? (any NetStreamDrawable))?.attachStream(rtmpStream)
|
||||
if #available(iOS 15.0, *), let layer = view.layer as? AVSampleBufferDisplayLayer {
|
||||
pictureInPictureController = AVPictureInPictureController(contentSource: .init(sampleBufferDisplayLayer: layer, playbackDelegate: self))
|
||||
}
|
||||
|
|
20
Gemfile.lock
20
Gemfile.lock
|
@ -16,16 +16,16 @@ GEM
|
|||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.757.0)
|
||||
aws-sdk-core (3.171.0)
|
||||
aws-partitions (1.771.0)
|
||||
aws-sdk-core (3.173.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.63.0)
|
||||
aws-sdk-kms (1.64.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.121.0)
|
||||
aws-sdk-s3 (1.122.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
|
@ -116,8 +116,8 @@ GEM
|
|||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.212.2)
|
||||
fastimage (2.2.7)
|
||||
fastlane (2.213.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
|
@ -141,7 +141,7 @@ GEM
|
|||
json (< 3.0.0)
|
||||
jwt (>= 2.1.0, < 3)
|
||||
mini_magick (>= 4.9.4, < 5.0.0)
|
||||
multipart-post (~> 2.0.0)
|
||||
multipart-post (>= 2.0.0, < 3.0.0)
|
||||
naturally (~> 2.2)
|
||||
optparse (~> 0.1.1)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
|
@ -160,7 +160,7 @@ GEM
|
|||
fourflusher (2.3.1)
|
||||
fuzzy_match (2.0.4)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.40.0)
|
||||
google-apis-androidpublisher_v3 (0.42.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
|
@ -213,7 +213,7 @@ GEM
|
|||
minitest (5.18.0)
|
||||
molinillo (0.8.0)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.0.0)
|
||||
multipart-post (2.3.0)
|
||||
nanaimo (0.3.0)
|
||||
nap (1.1.0)
|
||||
naturally (2.2.1)
|
||||
|
@ -286,4 +286,4 @@ DEPENDENCIES
|
|||
synx
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
||||
2.2.33
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Pod::Spec.new do |s|
|
||||
|
||||
s.name = "HaishinKit"
|
||||
s.version = "1.5.0"
|
||||
s.version = "1.5.2"
|
||||
s.summary = "Camera and Microphone streaming library via RTMP, HLS for iOS, macOS and tvOS."
|
||||
s.swift_version = "5.7"
|
||||
|
||||
|
|
|
@ -45,7 +45,6 @@
|
|||
293B42E92340B4840086F973 /* RTMPObjectEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */; };
|
||||
293B42EA2340B4840086F973 /* RTMPObjectEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */; };
|
||||
293B42EB2340B4840086F973 /* RTMPObjectEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */; };
|
||||
2940EF4F2380116500430456 /* RingBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2940EF4E2380116500430456 /* RingBufferTests.swift */; };
|
||||
2941746B22D069B300A2944F /* AudioEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2941746A22D069B300A2944F /* AudioEffect.swift */; };
|
||||
2941746C22D069B300A2944F /* AudioEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2941746A22D069B300A2944F /* AudioEffect.swift */; };
|
||||
2941746D22D069B300A2944F /* AudioEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2941746A22D069B300A2944F /* AudioEffect.swift */; };
|
||||
|
@ -55,13 +54,9 @@
|
|||
2942A4FA21A9418A004E1BEE /* Running.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2942A4F721A9418A004E1BEE /* Running.swift */; };
|
||||
2942EF841DFF4D06008E620C /* HaishinKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* HaishinKit.framework */; };
|
||||
2942EF861DFF4D3C008E620C /* HaishinKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* HaishinKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
294637A41EC8961C008EEC71 /* RTMPReaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294637A31EC8961C008EEC71 /* RTMPReaderTests.swift */; };
|
||||
294637A81EC89BC9008EEC71 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294637A71EC89BC9008EEC71 /* Config.swift */; };
|
||||
294637AA1EC8A79F008EEC71 /* SampleVideo_360x240_5mb.flv in Resources */ = {isa = PBXBuildFile; fileRef = 294637A91EC8A79F008EEC71 /* SampleVideo_360x240_5mb.flv */; };
|
||||
294852571D852499002DE492 /* RTMPTSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294852551D84BFAD002DE492 /* RTMPTSocket.swift */; };
|
||||
294B2D3223785E3800CE7BDC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294B2D3123785E3800CE7BDC /* RingBuffer.swift */; };
|
||||
294B2D3323785E3800CE7BDC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294B2D3123785E3800CE7BDC /* RingBuffer.swift */; };
|
||||
294B2D3423785E3800CE7BDC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294B2D3123785E3800CE7BDC /* RingBuffer.swift */; };
|
||||
294CC9B422D9BEC000F9DD5C /* DisplayLink-macOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294CC9B322D9BEC000F9DD5C /* DisplayLink-macOS.swift */; };
|
||||
295018201FFA1BD700358E10 /* AudioCodecTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950181F1FFA1BD700358E10 /* AudioCodecTests.swift */; };
|
||||
295018221FFA1C9D00358E10 /* SinWaveUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295018211FFA1C9D00358E10 /* SinWaveUtil.swift */; };
|
||||
|
@ -70,18 +65,12 @@
|
|||
2955F51F1D09EBAD004CC995 /* VisualEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296897461CDB01D20074D5F0 /* VisualEffect.swift */; };
|
||||
29562B881E6BFFE000BB940A /* HaishinKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B8761B1CD701F900FC07DA /* HaishinKit.framework */; };
|
||||
29562B891E6BFFE000BB940A /* HaishinKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 29B8761B1CD701F900FC07DA /* HaishinKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
2958910A1EEB8D1800CE51E1 /* FLVReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891091EEB8D1800CE51E1 /* FLVReader.swift */; };
|
||||
2958910B1EEB8D1800CE51E1 /* FLVReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891091EEB8D1800CE51E1 /* FLVReader.swift */; };
|
||||
2958910C1EEB8D1800CE51E1 /* FLVReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891091EEB8D1800CE51E1 /* FLVReader.swift */; };
|
||||
2958910E1EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */; };
|
||||
2958910F1EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */; };
|
||||
295891101EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */; };
|
||||
295891121EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891111EEB8D7200CE51E1 /* FLVFrameType.swift */; };
|
||||
295891131EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891111EEB8D7200CE51E1 /* FLVFrameType.swift */; };
|
||||
295891141EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891111EEB8D7200CE51E1 /* FLVFrameType.swift */; };
|
||||
295891161EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891151EEB8DFC00CE51E1 /* FLVTagType.swift */; };
|
||||
295891171EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891151EEB8DFC00CE51E1 /* FLVTagType.swift */; };
|
||||
295891181EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891151EEB8DFC00CE51E1 /* FLVTagType.swift */; };
|
||||
2958911A1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */; };
|
||||
2958911B1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */; };
|
||||
2958911C1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */; };
|
||||
|
@ -133,7 +122,7 @@
|
|||
29B876791CD70ACE00FC07DA /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876721CD70ACE00FC07DA /* HTTPStream.swift */; };
|
||||
29B8767A1CD70ACE00FC07DA /* M3U.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876731CD70ACE00FC07DA /* M3U.swift */; };
|
||||
29B876831CD70AE800FC07DA /* AudioSpecificConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */; };
|
||||
29B876841CD70AE800FC07DA /* AVCConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */; };
|
||||
29B876841CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */; };
|
||||
29B876861CD70AE800FC07DA /* PacketizedElementaryStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */; };
|
||||
29B876871CD70AE800FC07DA /* TSProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876811CD70AE800FC07DA /* TSProgram.swift */; };
|
||||
29B876881CD70AE800FC07DA /* TSPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876821CD70AE800FC07DA /* TSPacket.swift */; };
|
||||
|
@ -168,7 +157,7 @@
|
|||
29B876F91CD70D5900FC07DA /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876721CD70ACE00FC07DA /* HTTPStream.swift */; };
|
||||
29B876FA1CD70D5900FC07DA /* M3U.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876731CD70ACE00FC07DA /* M3U.swift */; };
|
||||
29B876FD1CD70D5A00FC07DA /* AudioSpecificConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */; };
|
||||
29B876FE1CD70D5A00FC07DA /* AVCConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */; };
|
||||
29B876FE1CD70D5A00FC07DA /* AVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */; };
|
||||
29B877001CD70D5A00FC07DA /* PacketizedElementaryStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */; };
|
||||
29B877011CD70D5A00FC07DA /* TSProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876811CD70AE800FC07DA /* TSProgram.swift */; };
|
||||
29B877021CD70D5A00FC07DA /* TSPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876821CD70AE800FC07DA /* TSPacket.swift */; };
|
||||
|
@ -251,7 +240,7 @@
|
|||
29EB3E011ED05856001CAE8B /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876721CD70ACE00FC07DA /* HTTPStream.swift */; };
|
||||
29EB3E021ED05858001CAE8B /* M3U.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876731CD70ACE00FC07DA /* M3U.swift */; };
|
||||
29EB3E031ED0585D001CAE8B /* AudioSpecificConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */; };
|
||||
29EB3E041ED05860001CAE8B /* AVCConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */; };
|
||||
29EB3E041ED05860001CAE8B /* AVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */; };
|
||||
29EB3E081ED05869001CAE8B /* PacketizedElementaryStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */; };
|
||||
29EB3E091ED0586B001CAE8B /* TSProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876811CD70AE800FC07DA /* TSProgram.swift */; };
|
||||
29EB3E0A1ED0586F001CAE8B /* TSPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876821CD70AE800FC07DA /* TSPacket.swift */; };
|
||||
|
@ -319,6 +308,23 @@
|
|||
BC1DC4A429F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */; };
|
||||
BC1DC4A529F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */; };
|
||||
BC1DC4A629F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */; };
|
||||
BC1DC4FB2A02868900E928ED /* FLVVideoFourCC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */; };
|
||||
BC1DC4FC2A02868900E928ED /* FLVVideoFourCC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */; };
|
||||
BC1DC4FD2A02868900E928ED /* FLVVideoFourCC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */; };
|
||||
BC1DC5042A02894D00E928ED /* FLVVideoFourCCTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5032A02894D00E928ED /* FLVVideoFourCCTests.swift */; };
|
||||
BC1DC5062A02963600E928ED /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5052A02963600E928ED /* FLVTagType.swift */; };
|
||||
BC1DC5072A02963600E928ED /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5052A02963600E928ED /* FLVTagType.swift */; };
|
||||
BC1DC5082A02963600E928ED /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5052A02963600E928ED /* FLVTagType.swift */; };
|
||||
BC1DC50A2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */; };
|
||||
BC1DC50B2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */; };
|
||||
BC1DC50C2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */; };
|
||||
BC1DC50E2A039E1900E928ED /* FLVVideoPacketType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */; };
|
||||
BC1DC50F2A039E1900E928ED /* FLVVideoPacketType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */; };
|
||||
BC1DC5102A039E1900E928ED /* FLVVideoPacketType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */; };
|
||||
BC1DC5122A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5112A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift */; };
|
||||
BC1DC5142A05428800E928ED /* HEVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */; };
|
||||
BC1DC5152A05428800E928ED /* HEVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */; };
|
||||
BC1DC5162A05428800E928ED /* HEVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */; };
|
||||
BC20DF38250377A3007BC608 /* IOUIScreenCaptureUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299B131C1D35272D00A1E8F5 /* IOUIScreenCaptureUnit.swift */; };
|
||||
BC3004CE296B0A1700119932 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3004CD296B0A1700119932 /* Shape.swift */; };
|
||||
BC3004CF296B0A1700119932 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3004CD296B0A1700119932 /* Shape.swift */; };
|
||||
|
@ -409,6 +415,10 @@
|
|||
BC83A4732403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */; };
|
||||
BC83A4742403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */; };
|
||||
BC83A4752403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */; };
|
||||
BC8446052A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */; };
|
||||
BC8446062A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */; };
|
||||
BC8446072A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */; };
|
||||
BC8446092A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8446082A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift */; };
|
||||
BC959EEF296EE4190067BA97 /* ImageTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC959EEE296EE4190067BA97 /* ImageTransform.swift */; };
|
||||
BC959EF0296EE4190067BA97 /* ImageTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC959EEE296EE4190067BA97 /* ImageTransform.swift */; };
|
||||
BC959EF1296EE4190067BA97 /* ImageTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC959EEE296EE4190067BA97 /* ImageTransform.swift */; };
|
||||
|
@ -437,9 +447,9 @@
|
|||
BCC1A72D264FAC1800661156 /* ESSpecificData.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC1A72A264FAC1800661156 /* ESSpecificData.swift */; };
|
||||
BCC9E9092636FF7400948774 /* DataBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC9E9082636FF7400948774 /* DataBufferTests.swift */; };
|
||||
BCCBCE9529A7C9C90095B51C /* AVCFormatStreamTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9429A7C9C90095B51C /* AVCFormatStreamTests.swift */; };
|
||||
BCCBCE9729A90D880095B51C /* NALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* NALUnit.swift */; };
|
||||
BCCBCE9829A90D880095B51C /* NALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* NALUnit.swift */; };
|
||||
BCCBCE9929A90D880095B51C /* NALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* NALUnit.swift */; };
|
||||
BCCBCE9729A90D880095B51C /* AVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */; };
|
||||
BCCBCE9829A90D880095B51C /* AVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */; };
|
||||
BCCBCE9929A90D880095B51C /* AVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */; };
|
||||
BCCBCE9B29A9D96A0095B51C /* NALUnitReaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9A29A9D96A0095B51C /* NALUnitReaderTests.swift */; };
|
||||
BCCBCEA029ADF55A0095B51C /* AudioCodecBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9F29ADF55A0095B51C /* AudioCodecBufferTests.swift */; };
|
||||
BCD1DC3A260627C300A1C593 /* Logboard.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC34DFD125EBB12C005F975A /* Logboard.xcframework */; };
|
||||
|
@ -601,24 +611,19 @@
|
|||
2927A2991E7ED2D70044AF91 /* LICENSE.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.md; sourceTree = "<group>"; };
|
||||
2930D03F1E12D17C00DA2DC5 /* SampleHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = "<group>"; };
|
||||
293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RTMPObjectEncoding.swift; sourceTree = "<group>"; };
|
||||
2940EF4E2380116500430456 /* RingBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RingBufferTests.swift; sourceTree = "<group>"; };
|
||||
2941746A22D069B300A2944F /* AudioEffect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioEffect.swift; sourceTree = "<group>"; };
|
||||
2942424C1CF4C01300D65DCB /* MD5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MD5.swift; sourceTree = "<group>"; };
|
||||
2942A4F721A9418A004E1BEE /* Running.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Running.swift; sourceTree = "<group>"; };
|
||||
2945CBBD1B4BE66000104112 /* HaishinKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HaishinKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
294637A31EC8961C008EEC71 /* RTMPReaderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RTMPReaderTests.swift; sourceTree = "<group>"; };
|
||||
294637A71EC89BC9008EEC71 /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = "<group>"; };
|
||||
294637A91EC8A79F008EEC71 /* SampleVideo_360x240_5mb.flv */ = {isa = PBXFileReference; lastKnownFileType = file; path = SampleVideo_360x240_5mb.flv; sourceTree = "<group>"; };
|
||||
294852551D84BFAD002DE492 /* RTMPTSocket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RTMPTSocket.swift; sourceTree = "<group>"; };
|
||||
294B2D3123785E3800CE7BDC /* RingBuffer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RingBuffer.swift; sourceTree = "<group>"; };
|
||||
294CC9B322D9BEC000F9DD5C /* DisplayLink-macOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DisplayLink-macOS.swift"; sourceTree = "<group>"; };
|
||||
2950181F1FFA1BD700358E10 /* AudioCodecTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioCodecTests.swift; sourceTree = "<group>"; };
|
||||
295018211FFA1C9D00358E10 /* SinWaveUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SinWaveUtil.swift; sourceTree = "<group>"; };
|
||||
2950742E1E4620B7007F15A4 /* PreferenceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferenceViewController.swift; sourceTree = "<group>"; };
|
||||
295891091EEB8D1800CE51E1 /* FLVReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVReader.swift; sourceTree = "<group>"; };
|
||||
2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVVideoCodec.swift; sourceTree = "<group>"; };
|
||||
295891111EEB8D7200CE51E1 /* FLVFrameType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVFrameType.swift; sourceTree = "<group>"; };
|
||||
295891151EEB8DFC00CE51E1 /* FLVTagType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVTagType.swift; sourceTree = "<group>"; };
|
||||
295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVAudioCodec.swift; sourceTree = "<group>"; };
|
||||
2958911D1EEB8E9600CE51E1 /* FLVSoundRate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVSoundRate.swift; sourceTree = "<group>"; };
|
||||
295891211EEB8EC500CE51E1 /* FLVAVCPacketType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVAVCPacketType.swift; sourceTree = "<group>"; };
|
||||
|
@ -667,7 +672,7 @@
|
|||
29B876721CD70ACE00FC07DA /* HTTPStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPStream.swift; sourceTree = "<group>"; };
|
||||
29B876731CD70ACE00FC07DA /* M3U.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = M3U.swift; sourceTree = "<group>"; };
|
||||
29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioSpecificConfig.swift; sourceTree = "<group>"; };
|
||||
29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AVCConfigurationRecord.swift; sourceTree = "<group>"; };
|
||||
29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AVCDecoderConfigurationRecord.swift; sourceTree = "<group>"; };
|
||||
29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PacketizedElementaryStream.swift; sourceTree = "<group>"; };
|
||||
29B876811CD70AE800FC07DA /* TSProgram.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TSProgram.swift; sourceTree = "<group>"; };
|
||||
29B876821CD70AE800FC07DA /* TSPacket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TSPacket.swift; sourceTree = "<group>"; };
|
||||
|
@ -735,6 +740,13 @@
|
|||
BC110252292DD6E900D48035 /* vImage_Buffer+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "vImage_Buffer+Extension.swift"; sourceTree = "<group>"; };
|
||||
BC110256292E661E00D48035 /* MultiCamCaptureSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiCamCaptureSettings.swift; sourceTree = "<group>"; };
|
||||
BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AVCaptureSession+Extension.swift"; sourceTree = "<group>"; };
|
||||
BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLVVideoFourCC.swift; sourceTree = "<group>"; };
|
||||
BC1DC5032A02894D00E928ED /* FLVVideoFourCCTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLVVideoFourCCTests.swift; sourceTree = "<group>"; };
|
||||
BC1DC5052A02963600E928ED /* FLVTagType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVTagType.swift; sourceTree = "<group>"; };
|
||||
BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HEVCDecoderConfigurationRecord.swift; sourceTree = "<group>"; };
|
||||
BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLVVideoPacketType.swift; sourceTree = "<group>"; };
|
||||
BC1DC5112A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HEVCDecoderConfigurationRecordTests.swift; sourceTree = "<group>"; };
|
||||
BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HEVCNALUnit.swift; sourceTree = "<group>"; };
|
||||
BC3004CD296B0A1700119932 /* Shape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shape.swift; sourceTree = "<group>"; };
|
||||
BC3004D3296BFFF600119932 /* MainSplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainSplitViewController.swift; sourceTree = "<group>"; };
|
||||
BC3004F0296C0C7400119932 /* MenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewController.swift; sourceTree = "<group>"; };
|
||||
|
@ -769,6 +781,8 @@
|
|||
BC7C56CC29A786AE00C41A9B /* ADTS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ADTS.swift; sourceTree = "<group>"; };
|
||||
BC7C56D029A78D4F00C41A9B /* ADTSHeaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ADTSHeaderTests.swift; sourceTree = "<group>"; };
|
||||
BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VTCompressionSession+Extension.swift"; sourceTree = "<group>"; };
|
||||
BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CMAudioSampleBufferUtil.swift; sourceTree = "<group>"; };
|
||||
BC8446082A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CMAudioSampleBufferUtilTests.swift; sourceTree = "<group>"; };
|
||||
BC959EEE296EE4190067BA97 /* ImageTransform.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageTransform.swift; sourceTree = "<group>"; };
|
||||
BC959F0D29705B1B0067BA97 /* SCStreamPublishViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SCStreamPublishViewController.swift; sourceTree = "<group>"; };
|
||||
BC959F1129717EDB0067BA97 /* PreferenceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferenceViewController.swift; sourceTree = "<group>"; };
|
||||
|
@ -783,7 +797,7 @@
|
|||
BCC1A72A264FAC1800661156 /* ESSpecificData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ESSpecificData.swift; sourceTree = "<group>"; };
|
||||
BCC9E9082636FF7400948774 /* DataBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataBufferTests.swift; sourceTree = "<group>"; };
|
||||
BCCBCE9429A7C9C90095B51C /* AVCFormatStreamTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVCFormatStreamTests.swift; sourceTree = "<group>"; };
|
||||
BCCBCE9629A90D880095B51C /* NALUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NALUnit.swift; sourceTree = "<group>"; };
|
||||
BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVCNALUnit.swift; sourceTree = "<group>"; };
|
||||
BCCBCE9A29A9D96A0095B51C /* NALUnitReaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NALUnitReaderTests.swift; sourceTree = "<group>"; };
|
||||
BCCBCE9F29ADF55A0095B51C /* AudioCodecBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioCodecBufferTests.swift; sourceTree = "<group>"; };
|
||||
BCD63AB226FDF1250084842D /* Example iOS+SwiftUI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example iOS+SwiftUI.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
@ -910,13 +924,13 @@
|
|||
298BCF321DD4C44A007FF86A /* AnyUtil.swift */,
|
||||
29DC17B221D0CC0600E26CED /* Atomic.swift */,
|
||||
29B876B81CD70B3900FC07DA /* ByteArray.swift */,
|
||||
BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */,
|
||||
29B876631CD70AB300FC07DA /* Constants.swift */,
|
||||
BC0D236C26331BAB001DDA0C /* DataBuffer.swift */,
|
||||
29B876671CD70AB300FC07DA /* DataConvertible.swift */,
|
||||
2976A4851D4903C300B53EF2 /* DeviceUtil.swift */,
|
||||
BC32E88729C9971100051507 /* InstanceHolder.swift */,
|
||||
2942424C1CF4C01300D65DCB /* MD5.swift */,
|
||||
294B2D3123785E3800CE7BDC /* RingBuffer.swift */,
|
||||
2942A4F721A9418A004E1BEE /* Running.swift */,
|
||||
);
|
||||
path = Util;
|
||||
|
@ -930,7 +944,6 @@
|
|||
290EA89E1DFB61B100053022 /* RTMPChunkTests.swift */,
|
||||
290686021DFDB7A6008EB7ED /* RTMPConnectionTests.swift */,
|
||||
2976077E20A89FBB00DCF24F /* RTMPMessageTests.swift */,
|
||||
294637A31EC8961C008EEC71 /* RTMPReaderTests.swift */,
|
||||
035AFA032263868E009DD0BB /* RTMPStreamTests.swift */,
|
||||
);
|
||||
path = RTMP;
|
||||
|
@ -944,6 +957,7 @@
|
|||
2917CB652104CA2800F6823A /* AudioSpecificConfigTests.swift */,
|
||||
BCCBCE9429A7C9C90095B51C /* AVCFormatStreamTests.swift */,
|
||||
BC7C56C629A7701F00C41A9B /* ESSpecificDataTests.swift */,
|
||||
BC1DC5112A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift */,
|
||||
BCCBCE9A29A9D96A0095B51C /* NALUnitReaderTests.swift */,
|
||||
290EA8951DFB619600053022 /* PacketizedElementaryStreamTests.swift */,
|
||||
290EA8971DFB619600053022 /* TSPacketTests.swift */,
|
||||
|
@ -957,11 +971,11 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
290EA8A41DFB61E700053022 /* ByteArrayTests.swift */,
|
||||
BC8446082A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift */,
|
||||
290EA8A51DFB61E700053022 /* CRC32Tests.swift */,
|
||||
BCC9E9082636FF7400948774 /* DataBufferTests.swift */,
|
||||
290EA8A61DFB61E700053022 /* EventDispatcherTests.swift */,
|
||||
290EA8A71DFB61E700053022 /* MD5Tests.swift */,
|
||||
2940EF4E2380116500430456 /* RingBufferTests.swift */,
|
||||
);
|
||||
path = Util;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1065,12 +1079,13 @@
|
|||
295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */,
|
||||
295891211EEB8EC500CE51E1 /* FLVAVCPacketType.swift */,
|
||||
295891111EEB8D7200CE51E1 /* FLVFrameType.swift */,
|
||||
295891091EEB8D1800CE51E1 /* FLVReader.swift */,
|
||||
2958911D1EEB8E9600CE51E1 /* FLVSoundRate.swift */,
|
||||
295891291EEB8F1D00CE51E1 /* FLVSoundSize.swift */,
|
||||
2958912D1EEB8F4100CE51E1 /* FLVSoundType.swift */,
|
||||
295891151EEB8DFC00CE51E1 /* FLVTagType.swift */,
|
||||
BC1DC5052A02963600E928ED /* FLVTagType.swift */,
|
||||
2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */,
|
||||
BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */,
|
||||
BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */,
|
||||
);
|
||||
path = FLV;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1157,6 +1172,7 @@
|
|||
295018191FFA196800358E10 /* Codec */,
|
||||
294637A71EC89BC9008EEC71 /* Config.swift */,
|
||||
291C2AD21CE9FF48006F042B /* Core */,
|
||||
BC1DC5022A02893600E928ED /* FLV */,
|
||||
291C2AD31CE9FF68006F042B /* HTTP */,
|
||||
29798E5D1CE60E5300F5CBD0 /* Info.plist */,
|
||||
BC0BF4F329866FB700D72CB4 /* Media */,
|
||||
|
@ -1343,6 +1359,14 @@
|
|||
path = Media;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
BC1DC5022A02893600E928ED /* FLV */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
BC1DC5032A02894D00E928ED /* FLVVideoFourCCTests.swift */,
|
||||
);
|
||||
path = FLV;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
BC3004FA296C3FC400119932 /* Extension */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -1358,11 +1382,13 @@
|
|||
children = (
|
||||
BC7C56CC29A786AE00C41A9B /* ADTS.swift */,
|
||||
29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */,
|
||||
29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */,
|
||||
29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */,
|
||||
BCB9773E2621812800C9A649 /* AVCFormatStream.swift */,
|
||||
BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */,
|
||||
29B876B91CD70B3900FC07DA /* CRC32.swift */,
|
||||
BCC1A72A264FAC1800661156 /* ESSpecificData.swift */,
|
||||
BCCBCE9629A90D880095B51C /* NALUnit.swift */,
|
||||
BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */,
|
||||
BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */,
|
||||
29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */,
|
||||
BCB976DE26107B5600C9A649 /* TSField.swift */,
|
||||
29B876821CD70AE800FC07DA /* TSPacket.swift */,
|
||||
|
@ -1866,7 +1892,6 @@
|
|||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
295891161EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */,
|
||||
BC4914AE28DDF445009E2DF6 /* VTDecompressionSession+Extension.swift in Sources */,
|
||||
29B876B11CD70B2800FC07DA /* RTMPMessage.swift in Sources */,
|
||||
2941746B22D069B300A2944F /* AudioEffect.swift in Sources */,
|
||||
|
@ -1875,7 +1900,6 @@
|
|||
BC4914A228DDD33D009E2DF6 /* VTSessionConvertible.swift in Sources */,
|
||||
2915EC4D1D85BB8C00621092 /* RTMPTSocket.swift in Sources */,
|
||||
BC11023E2917C35B00D48035 /* CVPixelBufferPool+Extension.swift in Sources */,
|
||||
2958910A1EEB8D1800CE51E1 /* FLVReader.swift in Sources */,
|
||||
29C2631C1D0083B50098D4EF /* IOVideoUnit.swift in Sources */,
|
||||
29B876B41CD70B2800FC07DA /* RTMPSharedObject.swift in Sources */,
|
||||
2901A4EE1D437170002BBD23 /* MediaLink.swift in Sources */,
|
||||
|
@ -1889,17 +1913,19 @@
|
|||
29B8765D1CD70A7900FC07DA /* VideoCodec.swift in Sources */,
|
||||
2999C3752071138F00892E55 /* MTHKView.swift in Sources */,
|
||||
29AF3FCF1D7C744C00E41212 /* NetStream.swift in Sources */,
|
||||
294B2D3223785E3800CE7BDC /* RingBuffer.swift in Sources */,
|
||||
2958910E1EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */,
|
||||
BC1DC5142A05428800E928ED /* HEVCNALUnit.swift in Sources */,
|
||||
BC6FC9222961B3D800A746EE /* vImage_CGImageFormat+Extension.swift in Sources */,
|
||||
299B13271D3B751400A1E8F5 /* HKView.swift in Sources */,
|
||||
BC44A1A923D31E92002D4297 /* AudioCodecRingBuffer.swift in Sources */,
|
||||
BC20DF38250377A3007BC608 /* IOUIScreenCaptureUnit.swift in Sources */,
|
||||
29B876AF1CD70B2800FC07DA /* RTMPChunk.swift in Sources */,
|
||||
29B876841CD70AE800FC07DA /* AVCConfigurationRecord.swift in Sources */,
|
||||
BC8446052A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */,
|
||||
29B876841CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift in Sources */,
|
||||
296242621D8DB86500C451A3 /* TSWriter.swift in Sources */,
|
||||
BC9CFA9323BDE8B700917EEF /* NetStreamDrawable.swift in Sources */,
|
||||
29B8769B1CD70B1100FC07DA /* MIME.swift in Sources */,
|
||||
BC1DC50E2A039E1900E928ED /* FLVVideoPacketType.swift in Sources */,
|
||||
29B8769C1CD70B1100FC07DA /* NetClient.swift in Sources */,
|
||||
29B876871CD70AE800FC07DA /* TSProgram.swift in Sources */,
|
||||
BC4C9EAF23F2E736004A14F2 /* AudioStreamBasicDescription+Extension.swift in Sources */,
|
||||
|
@ -1914,6 +1940,7 @@
|
|||
BC3004CE296B0A1700119932 /* Shape.swift in Sources */,
|
||||
BC34FA0B286CB90A00EFAF27 /* PiPHKView.swift in Sources */,
|
||||
293B42E92340B4840086F973 /* RTMPObjectEncoding.swift in Sources */,
|
||||
BC1DC4FB2A02868900E928ED /* FLVVideoFourCC.swift in Sources */,
|
||||
2976A47E1D48C5C700B53EF2 /* IORecorder.swift in Sources */,
|
||||
BC110257292E661E00D48035 /* MultiCamCaptureSettings.swift in Sources */,
|
||||
29B876B21CD70B2800FC07DA /* RTMPMuxer.swift in Sources */,
|
||||
|
@ -1924,7 +1951,7 @@
|
|||
2958912A1EEB8F1D00CE51E1 /* FLVSoundSize.swift in Sources */,
|
||||
29EA87DC1E79A0460043A5F8 /* Data+Extension.swift in Sources */,
|
||||
29DF20622312A3DD004057C3 /* RTMPNWSocket.swift in Sources */,
|
||||
BCCBCE9729A90D880095B51C /* NALUnit.swift in Sources */,
|
||||
BCCBCE9729A90D880095B51C /* AVCNALUnit.swift in Sources */,
|
||||
29B876BD1CD70B3900FC07DA /* CRC32.swift in Sources */,
|
||||
BCA2252C293CC5B600DD7CB2 /* IOScreenCaptureUnit.swift in Sources */,
|
||||
BC4914A628DDD367009E2DF6 /* VTSessionOption.swift in Sources */,
|
||||
|
@ -1949,6 +1976,7 @@
|
|||
29B876831CD70AE800FC07DA /* AudioSpecificConfig.swift in Sources */,
|
||||
295891121EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */,
|
||||
29B876961CD70AFE00FC07DA /* VideoEffect.swift in Sources */,
|
||||
BC1DC5062A02963600E928ED /* FLVTagType.swift in Sources */,
|
||||
29B876691CD70AB300FC07DA /* Constants.swift in Sources */,
|
||||
29B8766D1CD70AB300FC07DA /* DataConvertible.swift in Sources */,
|
||||
29B876781CD70ACE00FC07DA /* HTTPService.swift in Sources */,
|
||||
|
@ -1964,6 +1992,7 @@
|
|||
BC4914B628DEC2FE009E2DF6 /* VTSessionMode.swift in Sources */,
|
||||
295891261EEB8EF300CE51E1 /* FLVAACPacket.swift in Sources */,
|
||||
29B876791CD70ACE00FC07DA /* HTTPStream.swift in Sources */,
|
||||
BC1DC50A2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */,
|
||||
BC6FC91E29609A6800A746EE /* ShapeFactory.swift in Sources */,
|
||||
BC32E88829C9971100051507 /* InstanceHolder.swift in Sources */,
|
||||
BC7C56B7299E579F00C41A9B /* AudioCodecSettings.swift in Sources */,
|
||||
|
@ -1987,7 +2016,6 @@
|
|||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
290EA89B1DFB619600053022 /* TSPacketTests.swift in Sources */,
|
||||
294637A41EC8961C008EEC71 /* RTMPReaderTests.swift in Sources */,
|
||||
BCCBCE9529A7C9C90095B51C /* AVCFormatStreamTests.swift in Sources */,
|
||||
290EA8A91DFB61E700053022 /* ByteArrayTests.swift in Sources */,
|
||||
295018221FFA1C9D00358E10 /* SinWaveUtil.swift in Sources */,
|
||||
|
@ -1998,6 +2026,7 @@
|
|||
295018201FFA1BD700358E10 /* AudioCodecTests.swift in Sources */,
|
||||
290EA8AC1DFB61E700053022 /* MD5Tests.swift in Sources */,
|
||||
290EA8A01DFB61B100053022 /* AMFFoundationTests.swift in Sources */,
|
||||
BC8446092A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift in Sources */,
|
||||
BC7C56892995082700C41A9B /* NetStreamTests.swift in Sources */,
|
||||
2917CB662104CA2800F6823A /* AudioSpecificConfigTests.swift in Sources */,
|
||||
290EA8AB1DFB61E700053022 /* EventDispatcherTests.swift in Sources */,
|
||||
|
@ -2008,7 +2037,9 @@
|
|||
290EA89A1DFB619600053022 /* TSProgramTests.swift in Sources */,
|
||||
BCCBCEA029ADF55A0095B51C /* AudioCodecBufferTests.swift in Sources */,
|
||||
BC0BF4F72986CE8700D72CB4 /* VideoCodecTests.swift in Sources */,
|
||||
BC1DC5042A02894D00E928ED /* FLVVideoFourCCTests.swift in Sources */,
|
||||
290EA8931DFB617800053022 /* HTTPRequestTests.swift in Sources */,
|
||||
BC1DC5122A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift in Sources */,
|
||||
2976077F20A89FBB00DCF24F /* RTMPMessageTests.swift in Sources */,
|
||||
BC7C56C729A7701F00C41A9B /* ESSpecificDataTests.swift in Sources */,
|
||||
BCCBCE9B29A9D96A0095B51C /* NALUnitReaderTests.swift in Sources */,
|
||||
|
@ -2018,7 +2049,6 @@
|
|||
035AFA042263868E009DD0BB /* RTMPStreamTests.swift in Sources */,
|
||||
290686031DFDB7A7008EB7ED /* RTMPConnectionTests.swift in Sources */,
|
||||
BCC9E9092636FF7400948774 /* DataBufferTests.swift in Sources */,
|
||||
2940EF4F2380116500430456 /* RingBufferTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -2034,7 +2064,6 @@
|
|||
29B876F01CD70D5900FC07DA /* Constants.swift in Sources */,
|
||||
29EA87D91E79A0090043A5F8 /* URL+Extension.swift in Sources */,
|
||||
292AC17C1CF4C871004F5730 /* MD5.swift in Sources */,
|
||||
2958910B1EEB8D1800CE51E1 /* FLVReader.swift in Sources */,
|
||||
29B876F41CD70D5900FC07DA /* DataConvertible.swift in Sources */,
|
||||
2916196D1E7F0777009FB344 /* CMFormatDescription+Extension.swift in Sources */,
|
||||
29DF20632312A3DD004057C3 /* RTMPNWSocket.swift in Sources */,
|
||||
|
@ -2051,6 +2080,7 @@
|
|||
296543631D62FE9000734698 /* HKView-macOS.swift in Sources */,
|
||||
BC11024B2925147300D48035 /* IOCaptureUnit.swift in Sources */,
|
||||
29B876FA1CD70D5900FC07DA /* M3U.swift in Sources */,
|
||||
BC1DC4FC2A02868900E928ED /* FLVVideoFourCC.swift in Sources */,
|
||||
29B876FD1CD70D5A00FC07DA /* AudioSpecificConfig.swift in Sources */,
|
||||
BC32E88929C9971100051507 /* InstanceHolder.swift in Sources */,
|
||||
BC7C56C0299FC38D00C41A9B /* VideoSize.swift in Sources */,
|
||||
|
@ -2058,11 +2088,11 @@
|
|||
2941746C22D069B300A2944F /* AudioEffect.swift in Sources */,
|
||||
BC9CFA9423BDE8B700917EEF /* NetStreamDrawable.swift in Sources */,
|
||||
296242631D8DBA8C00C451A3 /* TSReader.swift in Sources */,
|
||||
29B876FE1CD70D5A00FC07DA /* AVCConfigurationRecord.swift in Sources */,
|
||||
295891171EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */,
|
||||
29B876FE1CD70D5A00FC07DA /* AVCDecoderConfigurationRecord.swift in Sources */,
|
||||
294852571D852499002DE492 /* RTMPTSocket.swift in Sources */,
|
||||
BC83A4742403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */,
|
||||
BCC1A72C264FAC1800661156 /* ESSpecificData.swift in Sources */,
|
||||
BC1DC50B2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */,
|
||||
BC1DC4A529F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */,
|
||||
BC110258292E661E00D48035 /* MultiCamCaptureSettings.swift in Sources */,
|
||||
29B877001CD70D5A00FC07DA /* PacketizedElementaryStream.swift in Sources */,
|
||||
|
@ -2080,7 +2110,6 @@
|
|||
29B877031CD70D5A00FC07DA /* IOAudioUnit.swift in Sources */,
|
||||
BC0D236E26331BAB001DDA0C /* DataBuffer.swift in Sources */,
|
||||
29B877051CD70D5A00FC07DA /* IOMixer.swift in Sources */,
|
||||
294B2D3323785E3800CE7BDC /* RingBuffer.swift in Sources */,
|
||||
2976A47F1D48FD6900B53EF2 /* IORecorder.swift in Sources */,
|
||||
BC44A1AA23D31E92002D4297 /* AudioCodecRingBuffer.swift in Sources */,
|
||||
29B877071CD70D5A00FC07DA /* SoundTransform.swift in Sources */,
|
||||
|
@ -2092,10 +2121,13 @@
|
|||
29B8770B1CD70D5A00FC07DA /* NetClient.swift in Sources */,
|
||||
29EA87EE1E79A3E30043A5F8 /* CVPixelBuffer+Extension.swift in Sources */,
|
||||
29B8770C1CD70D5A00FC07DA /* NetService.swift in Sources */,
|
||||
BC1DC5152A05428800E928ED /* HEVCNALUnit.swift in Sources */,
|
||||
BC8446062A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */,
|
||||
2958911B1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */,
|
||||
BC4914A328DDD33D009E2DF6 /* VTSessionConvertible.swift in Sources */,
|
||||
293B42EA2340B4840086F973 /* RTMPObjectEncoding.swift in Sources */,
|
||||
29DC17B421D0CC0600E26CED /* Atomic.swift in Sources */,
|
||||
BC1DC50F2A039E1900E928ED /* FLVVideoPacketType.swift in Sources */,
|
||||
BC959EF0296EE4190067BA97 /* ImageTransform.swift in Sources */,
|
||||
BC9F9C7926F8C16600B01ED0 /* Choreographer.swift in Sources */,
|
||||
BC558269240BB40E00011AC0 /* RTMPStreamInfo.swift in Sources */,
|
||||
|
@ -2125,13 +2157,14 @@
|
|||
BCB976E026107B5600C9A649 /* TSField.swift in Sources */,
|
||||
29B877191CD70D5A00FC07DA /* RTMPStream.swift in Sources */,
|
||||
29B8771B1CD70D5A00FC07DA /* ByteArray.swift in Sources */,
|
||||
BCCBCE9829A90D880095B51C /* NALUnit.swift in Sources */,
|
||||
BCCBCE9829A90D880095B51C /* AVCNALUnit.swift in Sources */,
|
||||
295891231EEB8EC500CE51E1 /* FLVAVCPacketType.swift in Sources */,
|
||||
29EA87DA1E79A00E0043A5F8 /* ExpressibleByIntegerLiteral+Extension.swift in Sources */,
|
||||
BC7C56B8299E579F00C41A9B /* AudioCodecSettings.swift in Sources */,
|
||||
29D0E3681DD4CE3700863B3B /* AnyUtil.swift in Sources */,
|
||||
29B8771C1CD70D5A00FC07DA /* CRC32.swift in Sources */,
|
||||
2958912B1EEB8F1D00CE51E1 /* FLVSoundSize.swift in Sources */,
|
||||
BC1DC5072A02963600E928ED /* FLVTagType.swift in Sources */,
|
||||
BC4914B328DDFE31009E2DF6 /* VTSessionOptionKey.swift in Sources */,
|
||||
29B8771D1CD70D5A00FC07DA /* EventDispatcher.swift in Sources */,
|
||||
BC7C56CE29A786AE00C41A9B /* ADTS.swift in Sources */,
|
||||
|
@ -2180,7 +2213,6 @@
|
|||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
BC55826A240BB40E00011AC0 /* RTMPStreamInfo.swift in Sources */,
|
||||
294B2D3423785E3800CE7BDC /* RingBuffer.swift in Sources */,
|
||||
29EB3E1F1ED059F7001CAE8B /* RTMPChunk.swift in Sources */,
|
||||
29EB3DFA1ED057A1001CAE8B /* CMVideoFormatDescription+Extension.swift in Sources */,
|
||||
BC6FC9242961B3D800A746EE /* vImage_CGImageFormat+Extension.swift in Sources */,
|
||||
|
@ -2191,7 +2223,6 @@
|
|||
29EB3E321ED05A2C001CAE8B /* ByteArray.swift in Sources */,
|
||||
29EB3E191ED05898001CAE8B /* NetSocket.swift in Sources */,
|
||||
29EB3E101ED0587F001CAE8B /* IORecorder.swift in Sources */,
|
||||
2958910C1EEB8D1800CE51E1 /* FLVReader.swift in Sources */,
|
||||
29EB3E0F1ED0587C001CAE8B /* IOMixer.swift in Sources */,
|
||||
BC34FA0F286CBD6F00EFAF27 /* PiPHKView.swift in Sources */,
|
||||
BC7A23F625171C8F0089F77C /* MTHKView.swift in Sources */,
|
||||
|
@ -2202,11 +2233,12 @@
|
|||
BC7C56B9299E579F00C41A9B /* AudioCodecSettings.swift in Sources */,
|
||||
29EB3DF01ED05768001CAE8B /* VideoCodec.swift in Sources */,
|
||||
29EB3E351ED05A33001CAE8B /* DeviceUtil.swift in Sources */,
|
||||
BCCBCE9929A90D880095B51C /* NALUnit.swift in Sources */,
|
||||
BCCBCE9929A90D880095B51C /* AVCNALUnit.swift in Sources */,
|
||||
29DC17B521D0CC0600E26CED /* Atomic.swift in Sources */,
|
||||
BC7C56CF29A786AE00C41A9B /* ADTS.swift in Sources */,
|
||||
BC44A1AB23D31E92002D4297 /* AudioCodecRingBuffer.swift in Sources */,
|
||||
29EB3E261ED05A07001CAE8B /* RTMPStream.swift in Sources */,
|
||||
BC1DC5082A02963600E928ED /* FLVTagType.swift in Sources */,
|
||||
29DF20642312A3DD004057C3 /* RTMPNWSocket.swift in Sources */,
|
||||
29EB3E131ED05887001CAE8B /* SoundTransform.swift in Sources */,
|
||||
29EB3DF81ED05799001CAE8B /* Mirror+Extension.swift in Sources */,
|
||||
|
@ -2215,6 +2247,7 @@
|
|||
BC83A4752403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */,
|
||||
BC9CFA9523BDE8B700917EEF /* NetStreamDrawable.swift in Sources */,
|
||||
29EB3E031ED0585D001CAE8B /* AudioSpecificConfig.swift in Sources */,
|
||||
BC8446072A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */,
|
||||
29EB3E141ED05889001CAE8B /* IOVideoUnit.swift in Sources */,
|
||||
29EB3E221ED059FD001CAE8B /* RTMPMessage.swift in Sources */,
|
||||
29EB3E001ED05854001CAE8B /* HTTPService.swift in Sources */,
|
||||
|
@ -2223,6 +2256,7 @@
|
|||
29EB3E0D1ED05877001CAE8B /* IOAudioUnit.swift in Sources */,
|
||||
2942A4FA21A9418A004E1BEE /* Running.swift in Sources */,
|
||||
295891101EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */,
|
||||
BC1DC5102A039E1900E928ED /* FLVVideoPacketType.swift in Sources */,
|
||||
29EB3DFD1ED05847001CAE8B /* CVPixelBuffer+Extension.swift in Sources */,
|
||||
BCC1A72D264FAC1800661156 /* ESSpecificData.swift in Sources */,
|
||||
BCB976E126107B5600C9A649 /* TSField.swift in Sources */,
|
||||
|
@ -2233,7 +2267,7 @@
|
|||
BC4914A428DDD33D009E2DF6 /* VTSessionConvertible.swift in Sources */,
|
||||
2941746D22D069B300A2944F /* AudioEffect.swift in Sources */,
|
||||
29EB3E151ED0588C001CAE8B /* VideoEffect.swift in Sources */,
|
||||
29EB3E041ED05860001CAE8B /* AVCConfigurationRecord.swift in Sources */,
|
||||
29EB3E041ED05860001CAE8B /* AVCDecoderConfigurationRecord.swift in Sources */,
|
||||
29EB3DF71ED05797001CAE8B /* URL+Extension.swift in Sources */,
|
||||
29DF20682312A436004057C3 /* RTMPSocketCompatible.swift in Sources */,
|
||||
29EB3E0B1ED05871001CAE8B /* TSReader.swift in Sources */,
|
||||
|
@ -2246,10 +2280,10 @@
|
|||
29EB3E1B1ED0589F001CAE8B /* AMF0Serializer.swift in Sources */,
|
||||
BC6FC92029609A6800A746EE /* ShapeFactory.swift in Sources */,
|
||||
29EB3E0C1ED05874001CAE8B /* TSWriter.swift in Sources */,
|
||||
295891181EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */,
|
||||
BC4914B428DDFE31009E2DF6 /* VTSessionOptionKey.swift in Sources */,
|
||||
29EB3DF91ED0579C001CAE8B /* ExpressibleByIntegerLiteral+Extension.swift in Sources */,
|
||||
29EB3E201ED059F9001CAE8B /* RTMPConnection.swift in Sources */,
|
||||
BC1DC5162A05428800E928ED /* HEVCNALUnit.swift in Sources */,
|
||||
29EB3E331ED05A2E001CAE8B /* MediaLink.swift in Sources */,
|
||||
29EB3E1D1ED058A5001CAE8B /* AMFFoundation.swift in Sources */,
|
||||
29EB3E251ED05A04001CAE8B /* RTMPSocket.swift in Sources */,
|
||||
|
@ -2260,6 +2294,7 @@
|
|||
29EB3E231ED059FF001CAE8B /* RTMPMuxer.swift in Sources */,
|
||||
29EB3DF11ED0576C001CAE8B /* Constants.swift in Sources */,
|
||||
29EB3E011ED05856001CAE8B /* HTTPStream.swift in Sources */,
|
||||
BC1DC50C2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */,
|
||||
29EB3E171ED05893001CAE8B /* NetClient.swift in Sources */,
|
||||
BC1DC4A629F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */,
|
||||
BC0D236F26331BAB001DDA0C /* DataBuffer.swift in Sources */,
|
||||
|
@ -2284,6 +2319,7 @@
|
|||
BC566F7025D2ECC500573C4C /* HLSService.swift in Sources */,
|
||||
29EB3E181ED05896001CAE8B /* NetService.swift in Sources */,
|
||||
295891281EEB8EF300CE51E1 /* FLVAACPacket.swift in Sources */,
|
||||
BC1DC4FD2A02868900E928ED /* FLVVideoFourCC.swift in Sources */,
|
||||
BC4914B828DEC2FE009E2DF6 /* VTSessionMode.swift in Sources */,
|
||||
2958911C1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */,
|
||||
29EB3DF61ED0577C001CAE8B /* CMSampleBuffer+Extension.swift in Sources */,
|
||||
|
@ -2577,9 +2613,9 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.5.0;
|
||||
MARKETING_VERSION = 1.5.2;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
"OTHER_SWIFT_FLAGS[arch=*]" = "-Xfrontend -debug-time-function-bodies";
|
||||
"OTHER_SWIFT_FLAGS[arch=*]" = "";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||
PRODUCT_NAME = HaishinKit;
|
||||
PROVISIONING_PROFILE = "";
|
||||
|
@ -2611,7 +2647,7 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.5.0;
|
||||
MARKETING_VERSION = 1.5.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||
PRODUCT_NAME = HaishinKit;
|
||||
PROVISIONING_PROFILE = "";
|
||||
|
@ -2688,8 +2724,8 @@
|
|||
"@loader_path/Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MARKETING_VERSION = 1.5.0;
|
||||
"OTHER_SWIFT_FLAGS[arch=*]" = "-Xfrontend -debug-time-function-bodies";
|
||||
MARKETING_VERSION = 1.5.2;
|
||||
"OTHER_SWIFT_FLAGS[arch=*]" = "";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||
PRODUCT_NAME = HaishinKit;
|
||||
SDKROOT = macosx;
|
||||
|
@ -2720,7 +2756,7 @@
|
|||
"@loader_path/Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MARKETING_VERSION = 1.5.0;
|
||||
MARKETING_VERSION = 1.5.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||
PRODUCT_NAME = HaishinKit;
|
||||
SDKROOT = macosx;
|
||||
|
@ -2853,7 +2889,7 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.5.0;
|
||||
MARKETING_VERSION = 1.5.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||
PRODUCT_NAME = HaishinKit;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
@ -2889,7 +2925,7 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.5.0;
|
||||
MARKETING_VERSION = 1.5.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||
PRODUCT_NAME = HaishinKit;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
|
35
README.md
35
README.md
|
@ -1,10 +1,12 @@
|
|||
# HaishinKit for iOS, macOS, tvOS, and [Android](https://github.com/shogo4405/HaishinKit.kt).
|
||||
[](https://github.com/shogo4405/HaishinKit.swift/stargazers)
|
||||
[](https://github.com/shogo4405/HaishinKit.swift/releases/latest)
|
||||
[](https://swiftpackageindex.com/shogo4405/HaishinKit.swift)
|
||||
[](https://swiftpackageindex.com/shogo4405/HaishinKit.swift)
|
||||
[](https://raw.githubusercontent.com/shogo4405/HaishinKit.swift/master/LICENSE.md)
|
||||
|
||||
* Camera and Microphone streaming library via RTMP, HLS for iOS, macOS, tvOS.
|
||||
* README.md contains unreleased content, which can be tested on the main branch.
|
||||
* [API Documentation](https://shogo4405.github.io/HaishinKit.swift/documentation/haishinkit)
|
||||
|
||||
<p align="center">
|
||||
|
@ -33,10 +35,17 @@ Enterprise Grade APIs for Feeds & Chat. <a href="https://getstream.io/tutorials/
|
|||
<a href="https://streamlabs.com/" target="_blank"><img src="https://user-images.githubusercontent.com/810189/206836172-9c360977-ab6b-4eff-860b-82d0e7b06318.png" width="350px" alt="Streamlabs" /></a>
|
||||
</p>
|
||||
|
||||
## 🌏 Related projects
|
||||
Project name |Notes |License
|
||||
----------------|------------|--------------
|
||||
[SRTHaishinKit for iOS.](https://github.com/shogo4405/SRTHaishinKit.swift)|Camera and Microphone streaming library via SRT.|[BSD 3-Clause "New" or "Revised" License](https://github.com/shogo4405/SRTHaishinKit.swift/blob/master/LICENSE.md)
|
||||
[HaishinKit for Android.](https://github.com/shogo4405/HaishinKit.kt)|Camera and Microphone streaming library via RTMP for Android.|[BSD 3-Clause "New" or "Revised" License](https://github.com/shogo4405/HaishinKit.kt/blob/master/LICENSE.md)
|
||||
[HaishinKit for Flutter.](https://github.com/shogo4405/HaishinKit.dart)|Camera and Microphone streaming library via RTMP for Flutter.|[BSD 3-Clause "New" or "Revised" License](https://github.com/shogo4405/HaishinKit.dart/blob/master/LICENSE.md)
|
||||
|
||||
## 🎨 Features
|
||||
### RTMP
|
||||
- [x] Authentication
|
||||
- [x] Publish and Recording (H264/AAC)
|
||||
- [x] Publish and Recording
|
||||
- [x] _Playback (Beta)_
|
||||
- [x] Adaptive bitrate streaming
|
||||
- [x] Handling (see also [#1153](/../../issues/1153))
|
||||
|
@ -49,6 +58,14 @@ Enterprise Grade APIs for Feeds & Chat. <a href="https://getstream.io/tutorials/
|
|||
- [x] _Tunneled (RTMPT over SSL/TLS) (Technical Preview)_
|
||||
- [x] _RTMPT (Technical Preview)_
|
||||
- [x] ReplayKit Live as a Broadcast Upload Extension
|
||||
- [x] Supported codec
|
||||
- Audio
|
||||
- [x] AAC
|
||||
- Video
|
||||
- [x] H264/AVC
|
||||
- ex: `stream.videoSettings.profileLevel = kVTProfileLevel_H264_Baseline_3_1 as String`
|
||||
- [x] H265/HEVC ([Server-side support is required.](https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf))
|
||||
- ex: `stream.videoSettings.profileLevel = kVTProfileLevel_HEVC_Main_AutoLevel as String`
|
||||
|
||||
### HLS
|
||||
- [x] HTTPService
|
||||
|
@ -75,11 +92,11 @@ if #available(iOS 13.0, *) {
|
|||
|Features|[HKView](https://shogo4405.github.io/HaishinKit.swift/Classes/HKView.html)|[PiPHKView](https://shogo4405.github.io/HaishinKit.swift/Classes/PiPHKView.html)|[MTHKView](https://shogo4405.github.io/HaishinKit.swift/Classes/MTHKView.html)|
|
||||
|-|:---:|:---:|:---:|
|
||||
|Engine|AVCaptureVideoPreviewLayer|AVSampleBufferDisplayLayer|Metal|
|
||||
|Publish|◯|◯|◯|
|
||||
|Playback|×|◯|◯|
|
||||
|VisualEffect|×|◯|◯|
|
||||
|PictureInPicture|×|◯|×|
|
||||
|MultiCamera|×|◯|◯|
|
||||
|Publish|✔|✔|✔|
|
||||
|Playback|<br />|✔|✔|
|
||||
|VisualEffect|<br />|✔|✔|
|
||||
|PictureInPicture|<br />|✔|<br />|
|
||||
|MultiCamera|<br />|✔|✔|
|
||||
|
||||
### Others
|
||||
- [x] [Support multitasking camera access.](https://developer.apple.com/documentation/avfoundation/capture_setup/accessing_the_camera_while_multitasking)
|
||||
|
@ -96,8 +113,6 @@ if #available(iOS 13.0, *) {
|
|||
|:----:|:----:|:----:|:----:|:----:|:----:|
|
||||
|1.5.0+|11.0+|10.13+|10.2+|14.3+|5.7+|
|
||||
|1.4.0+|11.0+|10.13+|10.2+|14.0+|5.7+|
|
||||
|1.3.0+|11.0+|10.13+|10.2+|14.0+|5.7+|
|
||||
|1.2.0+|9.0+|10.11+|10.2+|13.0+|5.5+|
|
||||
|
||||
## 🐾 Examples
|
||||
Examples project are available for iOS with UIKit, iOS with SwiftUI, macOS and tvOS.
|
||||
|
@ -128,7 +143,7 @@ source 'https://github.com/CocoaPods/Specs.git'
|
|||
use_frameworks!
|
||||
|
||||
def import_pods
|
||||
pod 'HaishinKit', '~> 1.5.0
|
||||
pod 'HaishinKit', '~> 1.5.2
|
||||
end
|
||||
|
||||
target 'Your Target' do
|
||||
|
@ -138,7 +153,7 @@ end
|
|||
```
|
||||
### Carthage
|
||||
```
|
||||
github "shogo4405/HaishinKit.swift" ~> 1.5.0
|
||||
github "shogo4405/HaishinKit.swift" ~> 1.5.2
|
||||
```
|
||||
### Swift Package Manager
|
||||
```
|
||||
|
|
|
@ -25,7 +25,7 @@ public class AudioCodec {
|
|||
}
|
||||
|
||||
/// Specifies the delegate.
|
||||
public weak var delegate: AudioCodecDelegate?
|
||||
public weak var delegate: (any AudioCodecDelegate)?
|
||||
/// This instance is running to process(true) or not(false).
|
||||
public private(set) var isRunning: Atomic<Bool> = .init(false)
|
||||
/// Specifies the settings for audio codec.
|
||||
|
|
|
@ -5,7 +5,7 @@ enum VTSessionMode {
|
|||
case compression
|
||||
case decompression
|
||||
|
||||
func makeSession(_ videoCodec: VideoCodec) -> VTSessionConvertible? {
|
||||
func makeSession(_ videoCodec: VideoCodec) -> (any VTSessionConvertible)? {
|
||||
switch self {
|
||||
case .compression:
|
||||
var session: VTCompressionSession?
|
||||
|
@ -13,7 +13,7 @@ enum VTSessionMode {
|
|||
allocator: kCFAllocatorDefault,
|
||||
width: videoCodec.settings.videoSize.width,
|
||||
height: videoCodec.settings.videoSize.height,
|
||||
codecType: kCMVideoCodecType_H264,
|
||||
codecType: videoCodec.settings.format.codecType,
|
||||
encoderSpecification: nil,
|
||||
imageBufferAttributes: videoCodec.attributes as CFDictionary?,
|
||||
compressedDataAllocator: nil,
|
||||
|
|
|
@ -25,16 +25,6 @@ public protocol VideoCodecDelegate: AnyObject {
|
|||
* The VideoCodec class provides methods for encode or decode for video.
|
||||
*/
|
||||
public class VideoCodec {
|
||||
static let defaultMinimumGroupOfPictures: Int = 12
|
||||
|
||||
#if os(OSX)
|
||||
#if arch(arm64)
|
||||
static let encoderName = NSString(string: "com.apple.videotoolbox.videoencoder.ave.avc")
|
||||
#else
|
||||
static let encoderName = NSString(string: "com.apple.videotoolbox.videoencoder.h264.gva")
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* The VideoCodec error domain codes.
|
||||
*/
|
||||
|
@ -51,7 +41,7 @@ public class VideoCodec {
|
|||
|
||||
/// The videoCodec's attributes value.
|
||||
public static var defaultAttributes: [NSString: AnyObject]? = [
|
||||
kCVPixelBufferIOSurfacePropertiesKey: [:] as AnyObject,
|
||||
kCVPixelBufferIOSurfacePropertiesKey: NSDictionary(),
|
||||
kCVPixelBufferMetalCompatibilityKey: kCFBooleanTrue
|
||||
]
|
||||
|
||||
|
@ -76,15 +66,10 @@ public class VideoCodec {
|
|||
guard !CMFormatDescriptionEqual(formatDescription, otherFormatDescription: oldValue) else {
|
||||
return
|
||||
}
|
||||
if let atoms: [String: AnyObject] = formatDescription?.`extension`(by: "SampleDescriptionExtensionAtoms"), let avcC: Data = atoms["avcC"] as? Data {
|
||||
let config = AVCConfigurationRecord(data: avcC)
|
||||
isBaseline = config.avcProfileIndication == 66
|
||||
}
|
||||
delegate?.videoCodec(self, didOutput: formatDescription)
|
||||
}
|
||||
}
|
||||
var needsSync: Atomic<Bool> = .init(true)
|
||||
var isBaseline = true
|
||||
var attributes: [NSString: AnyObject]? {
|
||||
guard VideoCodec.defaultAttributes != nil else {
|
||||
return nil
|
||||
|
@ -97,19 +82,17 @@ public class VideoCodec {
|
|||
attributes[kCVPixelBufferHeightKey] = NSNumber(value: settings.videoSize.height)
|
||||
return attributes
|
||||
}
|
||||
weak var delegate: VideoCodecDelegate?
|
||||
private(set) var session: VTSessionConvertible? {
|
||||
weak var delegate: (any VideoCodecDelegate)?
|
||||
private(set) var session: (any VTSessionConvertible)? {
|
||||
didSet {
|
||||
oldValue?.invalidate()
|
||||
invalidateSession = false
|
||||
}
|
||||
}
|
||||
private var invalidateSession = true
|
||||
private var buffers: [CMSampleBuffer] = []
|
||||
private var minimumGroupOfPictures: Int = VideoCodec.defaultMinimumGroupOfPictures
|
||||
|
||||
func appendImageBuffer(_ imageBuffer: CVImageBuffer, presentationTimeStamp: CMTime, duration: CMTime) {
|
||||
guard isRunning.value else {
|
||||
guard isRunning.value, !(delegate?.videoCodecWillDropFame(self) ?? false) else {
|
||||
return
|
||||
}
|
||||
if invalidateSession {
|
||||
|
@ -125,14 +108,12 @@ public class VideoCodec {
|
|||
return
|
||||
}
|
||||
formatDescription = sampleBuffer.formatDescription
|
||||
if !(delegate?.videoCodecWillDropFame(self) ?? false) {
|
||||
delegate?.videoCodec(self, didOutput: sampleBuffer)
|
||||
}
|
||||
delegate?.videoCodec(self, didOutput: sampleBuffer)
|
||||
}
|
||||
}
|
||||
|
||||
func appendSampleBuffer(_ sampleBuffer: CMSampleBuffer) {
|
||||
guard isRunning.value, !(delegate?.videoCodecWillDropFame(self) ?? false) else {
|
||||
guard isRunning.value else {
|
||||
return
|
||||
}
|
||||
if invalidateSession {
|
||||
|
@ -150,7 +131,7 @@ public class VideoCodec {
|
|||
var timingInfo = CMSampleTimingInfo(
|
||||
duration: duration,
|
||||
presentationTimeStamp: presentationTimeStamp,
|
||||
decodeTimeStamp: .invalid
|
||||
decodeTimeStamp: sampleBuffer.decodeTimeStamp
|
||||
)
|
||||
var videoFormatDescription: CMVideoFormatDescription?
|
||||
var status = CMVideoFormatDescriptionCreateForImageBuffer(
|
||||
|
@ -177,18 +158,7 @@ public class VideoCodec {
|
|||
delegate?.videoCodec(self, errorOccurred: .failedToFlame(status: status))
|
||||
return
|
||||
}
|
||||
|
||||
if isBaseline {
|
||||
delegate?.videoCodec(self, didOutput: buffer)
|
||||
} else {
|
||||
buffers.append(buffer)
|
||||
buffers.sort {
|
||||
$0.presentationTimeStamp < $1.presentationTimeStamp
|
||||
}
|
||||
if minimumGroupOfPictures <= buffers.count {
|
||||
delegate?.videoCodec(self, didOutput: buffers.removeFirst())
|
||||
}
|
||||
}
|
||||
delegate?.videoCodec(self, didOutput: buffer)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -243,7 +213,6 @@ extension VideoCodec: Running {
|
|||
self.session = nil
|
||||
self.invalidateSession = true
|
||||
self.needsSync.mutate { $0 = true }
|
||||
self.buffers.removeAll()
|
||||
self.formatDescription = nil
|
||||
#if os(iOS)
|
||||
NotificationCenter.default.removeObserver(self, name: AVAudioSession.interruptionNotification, object: nil)
|
||||
|
|
|
@ -43,6 +43,36 @@ public struct VideoCodecSettings: Codable {
|
|||
case trim = "Trim"
|
||||
}
|
||||
|
||||
/// The type of the VideoCodec supports format.
|
||||
enum Format: Codable {
|
||||
case h264
|
||||
case hevc
|
||||
|
||||
#if os(macOS)
|
||||
var encoderID: NSString {
|
||||
switch self {
|
||||
case .h264:
|
||||
#if arch(arm64)
|
||||
return NSString(string: "com.apple.videotoolbox.videoencoder.ave.avc")
|
||||
#else
|
||||
return NSString(string: "com.apple.videotoolbox.videoencoder.h264.gva")
|
||||
#endif
|
||||
case .hevc:
|
||||
return NSString(string: "com.apple.videotoolbox.videoencoder.ave.hevc")
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
var codecType: UInt32 {
|
||||
switch self {
|
||||
case .h264:
|
||||
return kCMVideoCodecType_H264
|
||||
case .hevc:
|
||||
return kCMVideoCodecType_HEVC
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Specifies the video size of encoding video.
|
||||
public var videoSize: VideoSize
|
||||
/// Specifies the bitrate.
|
||||
|
@ -57,10 +87,19 @@ public struct VideoCodecSettings: Codable {
|
|||
/// Specifies the bitRateMode.
|
||||
public var bitRateMode: BitRateMode
|
||||
/// Specifies the H264 profileLevel.
|
||||
public var profileLevel: String
|
||||
/// Specifies the HardwareEncoder is enabled(TRUE), or not(FALSE) for macOS.
|
||||
public var profileLevel: String {
|
||||
didSet {
|
||||
if profileLevel.contains("HEVC") {
|
||||
format = .hevc
|
||||
} else {
|
||||
format = .h264
|
||||
}
|
||||
}
|
||||
}
|
||||
/// Specifies the HardwareEncoder is enabled(TRUE), or not(FALSE) for macOS.
|
||||
public var isHardwareEncoderEnabled = true
|
||||
|
||||
var format: Format = .h264
|
||||
var expectedFrameRate: Float64 = IOMixer.defaultFrameRate
|
||||
|
||||
/// Creates a new VideoCodecSettings instance.
|
||||
|
@ -82,6 +121,9 @@ public struct VideoCodecSettings: Codable {
|
|||
self.bitRateMode = bitRateMode
|
||||
self.allowFrameReordering = allowFrameReordering
|
||||
self.isHardwareEncoderEnabled = isHardwareEncoderEnabled
|
||||
if profileLevel.contains("HEVC") {
|
||||
self.format = .hevc
|
||||
}
|
||||
}
|
||||
|
||||
func invalidateSession(_ rhs: VideoCodecSettings) -> Bool {
|
||||
|
@ -120,7 +162,7 @@ public struct VideoCodecSettings: Codable {
|
|||
])
|
||||
#if os(macOS)
|
||||
if isHardwareEncoderEnabled {
|
||||
options.insert(.init(key: .encoderID, value: VideoCodec.encoderName))
|
||||
options.insert(.init(key: .encoderID, value: format.encoderID))
|
||||
options.insert(.init(key: .enableHardwareAcceleratedVideoEncoder, value: kCFBooleanTrue))
|
||||
options.insert(.init(key: .requireHardwareAcceleratedVideoEncoder, value: kCFBooleanTrue))
|
||||
}
|
||||
|
|
|
@ -5,8 +5,4 @@ extension CMFormatDescription {
|
|||
var _mediaType: CMMediaType {
|
||||
CMFormatDescriptionGetMediaType(self)
|
||||
}
|
||||
|
||||
func `extension`(by key: String) -> [String: AnyObject]? {
|
||||
CMFormatDescriptionGetExtension(self, extensionKey: key as CFString) as? [String: AnyObject]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,21 +8,4 @@ extension CMVideoFormatDescription {
|
|||
var dimensions: CMVideoDimensions {
|
||||
CMVideoFormatDescriptionGetDimensions(self)
|
||||
}
|
||||
|
||||
static func create(pixelBuffer: CVPixelBuffer) -> CMVideoFormatDescription? {
|
||||
var formatDescription: CMFormatDescription?
|
||||
let status: OSStatus = CMVideoFormatDescriptionCreate(
|
||||
allocator: kCFAllocatorDefault,
|
||||
codecType: kCMVideoCodecType_422YpCbCr8,
|
||||
width: Int32(pixelBuffer.width),
|
||||
height: Int32(pixelBuffer.height),
|
||||
extensions: nil,
|
||||
formatDescriptionOut: &formatDescription
|
||||
)
|
||||
guard status == noErr else {
|
||||
logger.warn("\(status)")
|
||||
return nil
|
||||
}
|
||||
return formatDescription
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import Accelerate
|
||||
import CoreMedia
|
||||
import CoreVideo
|
||||
import Foundation
|
||||
|
||||
extension vImage_Buffer {
|
||||
|
@ -19,6 +20,11 @@ extension vImage_Buffer {
|
|||
mutating func copy(to cvPixelBuffer: CVPixelBuffer, format: inout vImage_CGImageFormat) -> vImage_Error {
|
||||
let cvImageFormat = vImageCVImageFormat_CreateWithCVPixelBuffer(cvPixelBuffer).takeRetainedValue()
|
||||
vImageCVImageFormat_SetColorSpace(cvImageFormat, CGColorSpaceCreateDeviceRGB())
|
||||
defer {
|
||||
if let dictionary = CVBufferGetAttachments(cvPixelBuffer, .shouldNotPropagate) {
|
||||
CVBufferSetAttachments(cvPixelBuffer, dictionary, .shouldPropagate)
|
||||
}
|
||||
}
|
||||
return vImageBuffer_CopyToCVPixelBuffer(
|
||||
&self,
|
||||
&format,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/// The type of flv supports aac packet types.
|
||||
public enum FLVAACPacketType: UInt8 {
|
||||
enum FLVAACPacketType: UInt8 {
|
||||
/// The sequence data.
|
||||
case seq = 0
|
||||
/// The raw data.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/// The type of flv supports avc packet types.
|
||||
public enum FLVAVCPacketType: UInt8 {
|
||||
enum FLVAVCPacketType: UInt8 {
|
||||
/// The sequence data.
|
||||
case seq = 0
|
||||
/// The NAL unit data.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import AVFoundation
|
||||
|
||||
/// The type of flv supports audio codecs.
|
||||
public enum FLVAudioCodec: UInt8 {
|
||||
enum FLVAudioCodec: UInt8 {
|
||||
/// The PCM codec.
|
||||
case pcm = 0
|
||||
/// The ADPCM codec.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/// The type of flv supports video frame types.
|
||||
public enum FLVFrameType: UInt8 {
|
||||
enum FLVFrameType: UInt8 {
|
||||
/// The keyframe.
|
||||
case key = 1
|
||||
/// The inter frame.
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
import AVFoundation
|
||||
|
||||
/// The FLVReader is used to read the contents of a FLV file.
|
||||
public final class FLVReader {
|
||||
/// The header of a FLV.
|
||||
public static let header = Data([0x46, 0x4C, 0x56, 1])
|
||||
|
||||
/// The headerSize of a FLV.
|
||||
static let headerSize: Int = 11
|
||||
|
||||
/// The url of a FLV file.
|
||||
public let url: URL
|
||||
private var currentOffSet: UInt64 = 0
|
||||
private var fileHandle: FileHandle?
|
||||
|
||||
/// Initializes and returns a newly allocated reader.
|
||||
public init(url: URL) {
|
||||
do {
|
||||
self.url = url
|
||||
fileHandle = try FileHandle(forReadingFrom: url)
|
||||
fileHandle?.seek(toFileOffset: 13)
|
||||
currentOffSet = 13
|
||||
} catch {
|
||||
logger.error(error)
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns data by FLVTag.
|
||||
public func getData(_ tag: FLVTag) -> Data? {
|
||||
fileHandle?.seek(toFileOffset: tag.offset)
|
||||
return fileHandle?.readData(ofLength: Int(UInt64(tag.dataSize)))
|
||||
}
|
||||
}
|
||||
|
||||
extension FLVReader: IteratorProtocol {
|
||||
// MARK: IteratorProtocol
|
||||
public func next() -> FLVTag? {
|
||||
guard let fileHandle: FileHandle = fileHandle else {
|
||||
return nil
|
||||
}
|
||||
var tag: FLVTag!
|
||||
fileHandle.seek(toFileOffset: currentOffSet)
|
||||
let data: Data = fileHandle.readData(ofLength: FLVReader.headerSize)
|
||||
guard !data.isEmpty else {
|
||||
return nil
|
||||
}
|
||||
switch data[0] {
|
||||
case 8:
|
||||
tag = FLVAudioTag(data: data)
|
||||
case 9:
|
||||
tag = FLVVideoTag(data: data)
|
||||
case 18:
|
||||
tag = FLVDataTag(data: data)
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
tag.readData(fileHandle)
|
||||
tag.offset = currentOffSet + UInt64(FLVReader.headerSize)
|
||||
currentOffSet += UInt64(FLVReader.headerSize) + UInt64(tag.dataSize) + 4
|
||||
return tag
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/// The type of flv supports audio sound rates.
|
||||
public enum FLVSoundRate: UInt8 {
|
||||
enum FLVSoundRate: UInt8 {
|
||||
/// The sound rate of 5,500.0kHz.
|
||||
case kHz5_5 = 0
|
||||
/// Ths sound rate of 11,000.0kHz.
|
||||
|
@ -10,7 +10,7 @@ public enum FLVSoundRate: UInt8 {
|
|||
case kHz44 = 3
|
||||
|
||||
/// The float typed value.
|
||||
public var floatValue: Float64 {
|
||||
var floatValue: Float64 {
|
||||
switch self {
|
||||
case .kHz5_5:
|
||||
return 5500
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/// The type of flv supports audio sound size.
|
||||
public enum FLVSoundSize: UInt8 {
|
||||
enum FLVSoundSize: UInt8 {
|
||||
/// The 8bit sound.
|
||||
case snd8bit = 0
|
||||
/// The 16bit sound.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/// The type of flv supports audio sound channel type..
|
||||
public enum FLVSoundType: UInt8 {
|
||||
enum FLVSoundType: UInt8 {
|
||||
/// The mono sound.
|
||||
case mono = 0
|
||||
/// The stereo sound.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import Foundation
|
||||
|
||||
/// The type of flv tag.
|
||||
public enum FLVTagType: UInt8 {
|
||||
enum FLVTagType: UInt8 {
|
||||
/// The Audio tag,
|
||||
case audio = 8
|
||||
/// The Video tag.
|
||||
|
@ -29,127 +29,3 @@ public enum FLVTagType: UInt8 {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
/// The interface of FLV tag.
|
||||
public protocol FLVTag: CustomDebugStringConvertible {
|
||||
/// The type of this tag.
|
||||
var tagType: FLVTagType { get set }
|
||||
/// The length of data int the field.
|
||||
var dataSize: UInt32 { get set }
|
||||
/// The timestamp in milliseconds.
|
||||
var timestamp: UInt32 { get set }
|
||||
/// The extension of the timestamp.
|
||||
var timestampExtended: UInt8 { get set }
|
||||
/// The streamId, always 0.
|
||||
var streamId: UInt32 { get set }
|
||||
/// The data offset of a flv file.
|
||||
var offset: UInt64 { get set }
|
||||
|
||||
/// Initialize a new object.
|
||||
init()
|
||||
/// Read data of fileHandler.
|
||||
mutating func readData(_ fileHandler: FileHandle)
|
||||
}
|
||||
|
||||
extension FLVTag {
|
||||
var headerSize: Int {
|
||||
tagType.headerSize
|
||||
}
|
||||
|
||||
init?(data: Data) {
|
||||
self.init()
|
||||
let buffer = ByteArray(data: data)
|
||||
do {
|
||||
tagType = FLVTagType(rawValue: try buffer.readUInt8()) ?? .data
|
||||
dataSize = try buffer.readUInt24()
|
||||
timestamp = try buffer.readUInt24()
|
||||
timestampExtended = try buffer.readUInt8()
|
||||
streamId = try buffer.readUInt24()
|
||||
buffer.clear()
|
||||
} catch {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: CustomDebugStringConvertible
|
||||
public var debugDescription: String {
|
||||
Mirror(reflecting: self).debugDescription
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
/// A structure that defines the FLVTag of Data.
|
||||
public struct FLVDataTag: FLVTag {
|
||||
public var tagType: FLVTagType = .data
|
||||
public var dataSize: UInt32 = 0
|
||||
public var timestamp: UInt32 = 0
|
||||
public var timestampExtended: UInt8 = 0
|
||||
public var streamId: UInt32 = 0
|
||||
public var offset: UInt64 = 0
|
||||
|
||||
public init() {
|
||||
}
|
||||
|
||||
public mutating func readData(_ fileHandler: FileHandle) {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
/// A structure that defines the FLVTag of an audio.
|
||||
public struct FLVAudioTag: FLVTag {
|
||||
public var tagType: FLVTagType = .audio
|
||||
public var dataSize: UInt32 = 0
|
||||
public var timestamp: UInt32 = 0
|
||||
public var timestampExtended: UInt8 = 0
|
||||
public var streamId: UInt32 = 0
|
||||
public var offset: UInt64 = 0
|
||||
/// Specifies the codec of audio.
|
||||
public var codec: FLVAudioCodec = .unknown
|
||||
/// Specifies the sound of rate.
|
||||
public var soundRate: FLVSoundRate = .kHz5_5
|
||||
/// Specifies the sound of size.
|
||||
public var soundSize: FLVSoundSize = .snd8bit
|
||||
/// Specifies the sound of type.
|
||||
public var soundType: FLVSoundType = .mono
|
||||
|
||||
public init() {
|
||||
}
|
||||
|
||||
public mutating func readData(_ fileHandler: FileHandle) {
|
||||
let data: Data = fileHandler.readData(ofLength: headerSize)
|
||||
codec = FLVAudioCodec(rawValue: data[0] >> 4) ?? .unknown
|
||||
soundRate = FLVSoundRate(rawValue: (data[0] & 0b00001100) >> 2) ?? .kHz5_5
|
||||
soundSize = FLVSoundSize(rawValue: (data[0] & 0b00000010) >> 1) ?? .snd8bit
|
||||
soundType = FLVSoundType(rawValue: data[0] & 0b00000001) ?? .mono
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
/// A structure that defines the FLVTag of am video.
|
||||
public struct FLVVideoTag: FLVTag {
|
||||
public var tagType: FLVTagType = .video
|
||||
public var dataSize: UInt32 = 0
|
||||
public var timestamp: UInt32 = 0
|
||||
public var timestampExtended: UInt8 = 0
|
||||
public var streamId: UInt32 = 0
|
||||
public var offset: UInt64 = 0
|
||||
/// Specifies the frame type of video.
|
||||
public var frameType: FLVFrameType = .command
|
||||
/// Specifies the codec of video.
|
||||
public var codec: FLVVideoCodec = .unknown
|
||||
/// Specifies the avc packet type.
|
||||
public var avcPacketType: FLVAVCPacketType = .eos
|
||||
/// Specifies the composition time.
|
||||
public var compositionTime: Int32 = 0
|
||||
|
||||
public init() {
|
||||
}
|
||||
|
||||
public mutating func readData(_ fileHandler: FileHandle) {
|
||||
let data: Data = fileHandler.readData(ofLength: headerSize)
|
||||
frameType = FLVFrameType(rawValue: data[0] >> 4) ?? .command
|
||||
codec = FLVVideoCodec(rawValue: data[0] & 0b00001111) ?? .unknown
|
||||
avcPacketType = FLVAVCPacketType(rawValue: data[1]) ?? .eos
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import Foundation
|
||||
|
||||
/// The type of flv supports video codecs.
|
||||
public enum FLVVideoCodec: UInt8 {
|
||||
enum FLVVideoCodec: UInt8 {
|
||||
/// The JPEG codec.
|
||||
case jpeg = 1
|
||||
/// The Sorenson H263 codec.
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
import Foundation
|
||||
|
||||
enum FLVVideoFourCC: UInt32 {
|
||||
case av1 = 0x61763031 // { 'a', 'v', '0', '1' }
|
||||
case vp9 = 0x76703039 // { 'v', 'p', '0', '9' }
|
||||
case hevc = 0x68766331 // { 'h', 'v', 'c', '1' }
|
||||
|
||||
var isSupported: Bool {
|
||||
switch self {
|
||||
case .av1:
|
||||
return false
|
||||
case .vp9:
|
||||
return false
|
||||
case .hevc:
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import Foundation
|
||||
|
||||
enum FLVVideoPacketType: UInt8 {
|
||||
case sequenceStart = 0
|
||||
case codedFrames = 1
|
||||
case sequenceEnd = 2
|
||||
case codedFramesX = 3
|
||||
case metadata = 4
|
||||
case mpeg2TSSequenceStart = 5
|
||||
}
|
|
@ -1,16 +1,20 @@
|
|||
import AVFoundation
|
||||
import VideoToolbox
|
||||
|
||||
protocol DecoderConfigurationRecord {
|
||||
func makeFormatDescription(_ formatDescriptionOut: UnsafeMutablePointer<CMFormatDescription?>) -> OSStatus
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
/*
|
||||
- seealso: ISO/IEC 14496-15 2010
|
||||
*/
|
||||
struct AVCConfigurationRecord {
|
||||
struct AVCDecoderConfigurationRecord: DecoderConfigurationRecord {
|
||||
static func getData(_ formatDescription: CMFormatDescription?) -> Data? {
|
||||
guard let formatDescription = formatDescription else {
|
||||
guard let formatDescription else {
|
||||
return nil
|
||||
}
|
||||
if let atoms: NSDictionary = CMFormatDescriptionGetExtension(formatDescription, extensionKey: "SampleDescriptionExtensionAtoms" as CFString) as? NSDictionary {
|
||||
if let atoms = CMFormatDescriptionGetExtension(formatDescription, extensionKey: "SampleDescriptionExtensionAtoms" as CFString) as? NSDictionary {
|
||||
return atoms["avcC"] as? Data
|
||||
}
|
||||
return nil
|
||||
|
@ -75,7 +79,7 @@ struct AVCConfigurationRecord {
|
|||
}
|
||||
}
|
||||
|
||||
extension AVCConfigurationRecord: DataConvertible {
|
||||
extension AVCDecoderConfigurationRecord: DataConvertible {
|
||||
// MARK: DataConvertible
|
||||
var data: Data {
|
||||
get {
|
||||
|
@ -108,7 +112,7 @@ extension AVCConfigurationRecord: DataConvertible {
|
|||
avcLevelIndication = try buffer.readUInt8()
|
||||
lengthSizeMinusOneWithReserved = try buffer.readUInt8()
|
||||
numOfSequenceParameterSetsWithReserved = try buffer.readUInt8()
|
||||
let numOfSequenceParameterSets: UInt8 = numOfSequenceParameterSetsWithReserved & ~AVCConfigurationRecord.reserveNumOfSequenceParameterSets
|
||||
let numOfSequenceParameterSets: UInt8 = numOfSequenceParameterSetsWithReserved & ~AVCDecoderConfigurationRecord.reserveNumOfSequenceParameterSets
|
||||
for _ in 0..<numOfSequenceParameterSets {
|
||||
let length = Int(try buffer.readUInt16())
|
||||
sequenceParameterSets.append(try buffer.readBytes(length).bytes)
|
||||
|
@ -125,7 +129,7 @@ extension AVCConfigurationRecord: DataConvertible {
|
|||
}
|
||||
}
|
||||
|
||||
extension AVCConfigurationRecord: CustomDebugStringConvertible {
|
||||
extension AVCDecoderConfigurationRecord: CustomDebugStringConvertible {
|
||||
// MARK: CustomDebugStringConvertible
|
||||
var debugDescription: String {
|
||||
Mirror(reflecting: self).debugDescription
|
|
@ -1,7 +1,7 @@
|
|||
import CoreMedia
|
||||
import Foundation
|
||||
|
||||
enum NALUnitType: UInt8, Equatable {
|
||||
enum AVCNALUnitType: UInt8, Equatable {
|
||||
case unspec = 0
|
||||
case slice = 1 // P frame
|
||||
case dpa = 2
|
||||
|
@ -18,9 +18,9 @@ enum NALUnitType: UInt8, Equatable {
|
|||
}
|
||||
|
||||
// MARK: -
|
||||
struct NALUnit: Equatable {
|
||||
struct AVCNALUnit: Equatable {
|
||||
let refIdc: UInt8
|
||||
let type: NALUnitType
|
||||
let type: AVCNALUnitType
|
||||
let payload: Data
|
||||
|
||||
init(_ data: Data) {
|
||||
|
@ -29,7 +29,7 @@ struct NALUnit: Equatable {
|
|||
|
||||
init(_ data: Data, length: Int) {
|
||||
self.refIdc = data[0] >> 5
|
||||
self.type = NALUnitType(rawValue: data[0] & 0x1f) ?? .unspec
|
||||
self.type = AVCNALUnitType(rawValue: data[0] & 0x1f) ?? .unspec
|
||||
self.payload = data.subdata(in: 1..<length)
|
||||
}
|
||||
|
||||
|
@ -41,14 +41,14 @@ struct NALUnit: Equatable {
|
|||
}
|
||||
}
|
||||
|
||||
class NALUnitReader {
|
||||
class AVCNALUnitReader {
|
||||
static let defaultStartCodeLength: Int = 4
|
||||
static let defaultNALUnitHeaderLength: Int32 = 4
|
||||
|
||||
var nalUnitHeaderLength: Int32 = NALUnitReader.defaultNALUnitHeaderLength
|
||||
var nalUnitHeaderLength: Int32 = AVCNALUnitReader.defaultNALUnitHeaderLength
|
||||
|
||||
func read(_ data: Data) -> [NALUnit] {
|
||||
var units: [NALUnit] = []
|
||||
func read(_ data: Data) -> [AVCNALUnit] {
|
||||
var units: [AVCNALUnit] = []
|
||||
var lastIndexOf = data.count - 1
|
||||
for i in (2..<data.count).reversed() {
|
||||
guard data[i] == 1 && data[i - 1] == 0 && data[i - 2] == 0 else {
|
|
@ -0,0 +1,134 @@
|
|||
import AVFoundation
|
||||
import Foundation
|
||||
|
||||
/// ISO/IEC 14496-15 8.3.3.1.2
|
||||
struct HEVCDecoderConfigurationRecord: DecoderConfigurationRecord {
|
||||
static func getData(_ formatDescription: CMFormatDescription?) -> Data? {
|
||||
guard let formatDescription else {
|
||||
return nil
|
||||
}
|
||||
if let atoms = CMFormatDescriptionGetExtension(formatDescription, extensionKey: "SampleDescriptionExtensionAtoms" as CFString) as? NSDictionary {
|
||||
return atoms["hvcC"] as? Data
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var configurationVersion: UInt8 = 1
|
||||
var generalProfileSpace: UInt8 = 0
|
||||
var generalTierFlag = false
|
||||
var generalProfileIdc: UInt8 = 0
|
||||
var generalProfileCompatibilityFlags: UInt32 = 0
|
||||
var generalConstraintIndicatorFlags: UInt64 = 0
|
||||
var generalLevelIdc: UInt8 = 0
|
||||
var minSpatialSegmentationIdc: UInt16 = 0
|
||||
var parallelismType: UInt8 = 0
|
||||
var chromaFormat: UInt8 = 0
|
||||
var bitDepthLumaMinus8: UInt8 = 0
|
||||
var bitDepthChromaMinus8: UInt8 = 0
|
||||
var avgFrameRate: UInt16 = 0
|
||||
var constantFrameRate: UInt8 = 0
|
||||
var numTemporalLayers: UInt8 = 0
|
||||
var temporalIdNested: UInt8 = 0
|
||||
var lengthSizeMinusOne: UInt8 = 0
|
||||
var numberOfArrays: UInt8 = 0
|
||||
var array: [HEVCNALUnitType: [Data]] = [:]
|
||||
|
||||
init() {
|
||||
}
|
||||
|
||||
init(data: Data) {
|
||||
self.data = data
|
||||
}
|
||||
|
||||
func makeFormatDescription(_ formatDescriptionOut: UnsafeMutablePointer<CMFormatDescription?>) -> OSStatus {
|
||||
guard let vps = array[.vps], let sps = array[.sps], let pps = array[.pps] else {
|
||||
return kCMFormatDescriptionBridgeError_InvalidParameter
|
||||
}
|
||||
return vps[0].withUnsafeBytes { (vpsBuffer: UnsafeRawBufferPointer) -> OSStatus in
|
||||
guard let vpsBaseAddress = vpsBuffer.baseAddress else {
|
||||
return kCMFormatDescriptionBridgeError_InvalidParameter
|
||||
}
|
||||
return sps[0].withUnsafeBytes { (spsBuffer: UnsafeRawBufferPointer) -> OSStatus in
|
||||
guard let spsBaseAddress = spsBuffer.baseAddress else {
|
||||
return kCMFormatDescriptionBridgeError_InvalidParameter
|
||||
}
|
||||
return pps[0].withUnsafeBytes { (ppsBuffer: UnsafeRawBufferPointer) -> OSStatus in
|
||||
guard let ppsBaseAddress = ppsBuffer.baseAddress else {
|
||||
return kCMFormatDescriptionBridgeError_InvalidParameter
|
||||
}
|
||||
let pointers: [UnsafePointer<UInt8>] = [
|
||||
vpsBaseAddress.assumingMemoryBound(to: UInt8.self),
|
||||
spsBaseAddress.assumingMemoryBound(to: UInt8.self),
|
||||
ppsBaseAddress.assumingMemoryBound(to: UInt8.self)
|
||||
]
|
||||
let sizes: [Int] = [vpsBuffer.count, spsBuffer.count, ppsBuffer.count]
|
||||
let nalUnitHeaderLength: Int32 = 4
|
||||
return CMVideoFormatDescriptionCreateFromHEVCParameterSets(
|
||||
allocator: kCFAllocatorDefault,
|
||||
parameterSetCount: pointers.count,
|
||||
parameterSetPointers: pointers,
|
||||
parameterSetSizes: sizes,
|
||||
nalUnitHeaderLength: nalUnitHeaderLength,
|
||||
extensions: nil,
|
||||
formatDescriptionOut: formatDescriptionOut
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension HEVCDecoderConfigurationRecord: DataConvertible {
|
||||
// MARK: DataConvertible
|
||||
var data: Data {
|
||||
get {
|
||||
let buffer = ByteArray()
|
||||
.writeUInt8(configurationVersion)
|
||||
return buffer.data
|
||||
}
|
||||
set {
|
||||
let buffer = ByteArray(data: newValue)
|
||||
do {
|
||||
configurationVersion = try buffer.readUInt8()
|
||||
let a = try buffer.readUInt8()
|
||||
generalProfileSpace = a >> 6
|
||||
generalTierFlag = a & 0x20 > 0
|
||||
generalProfileIdc = a & 0x1F
|
||||
generalProfileCompatibilityFlags = try buffer.readUInt32()
|
||||
generalConstraintIndicatorFlags = UInt64(try buffer.readUInt32()) << 16 | UInt64(try buffer.readUInt16())
|
||||
generalLevelIdc = try buffer.readUInt8()
|
||||
minSpatialSegmentationIdc = try buffer.readUInt16() & 0xFFF
|
||||
parallelismType = try buffer.readUInt8() & 0x3
|
||||
chromaFormat = try buffer.readUInt8() & 0x3
|
||||
bitDepthLumaMinus8 = try buffer.readUInt8() & 0x7
|
||||
bitDepthChromaMinus8 = try buffer.readUInt8() & 0x7
|
||||
avgFrameRate = try buffer.readUInt16()
|
||||
let b = try buffer.readUInt8()
|
||||
constantFrameRate = b >> 6
|
||||
numTemporalLayers = b & 0x38 >> 3
|
||||
temporalIdNested = b & 0x6 >> 1
|
||||
lengthSizeMinusOne = b & 0x3
|
||||
numberOfArrays = try buffer.readUInt8()
|
||||
for _ in 0..<numberOfArrays {
|
||||
let a = try buffer.readUInt8()
|
||||
let nalUnitType = HEVCNALUnitType(rawValue: a & 0b00111111) ?? .unspec
|
||||
array[nalUnitType] = []
|
||||
let numNalus = try buffer.readUInt16()
|
||||
for _ in 0..<numNalus {
|
||||
let length = try buffer.readUInt16()
|
||||
array[nalUnitType]?.append(try buffer.readBytes(Int(length)))
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
logger.error("\(buffer)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension HEVCDecoderConfigurationRecord: CustomDebugStringConvertible {
|
||||
// MARK: CustomDebugStringConvertible
|
||||
var debugDescription: String {
|
||||
Mirror(reflecting: self).debugDescription
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
import Foundation
|
||||
|
||||
enum HEVCNALUnitType: UInt8 {
|
||||
case unspec = 0
|
||||
case vps = 32
|
||||
case sps = 33
|
||||
case pps = 34
|
||||
}
|
|
@ -155,7 +155,7 @@ struct PacketizedElementaryStream: PESPacketHeader {
|
|||
if let config: AudioSpecificConfig = config as? AudioSpecificConfig {
|
||||
return PacketizedElementaryStream(bytes: bytes, count: count, presentationTimeStamp: presentationTimeStamp, decodeTimeStamp: decodeTimeStamp, timestamp: timestamp, config: config)
|
||||
}
|
||||
if let config: AVCConfigurationRecord = config as? AVCConfigurationRecord {
|
||||
if let config: AVCDecoderConfigurationRecord = config as? AVCDecoderConfigurationRecord {
|
||||
return PacketizedElementaryStream(bytes: bytes, count: count, presentationTimeStamp: presentationTimeStamp, decodeTimeStamp: decodeTimeStamp, timestamp: timestamp, config: randomAccessIndicator ? config : nil)
|
||||
}
|
||||
return nil
|
||||
|
@ -231,11 +231,11 @@ struct PacketizedElementaryStream: PESPacketHeader {
|
|||
}
|
||||
}
|
||||
|
||||
init?(bytes: UnsafePointer<UInt8>?, count: UInt32, presentationTimeStamp: CMTime, decodeTimeStamp: CMTime, timestamp: CMTime, config: AVCConfigurationRecord?) {
|
||||
init?(bytes: UnsafePointer<UInt8>?, count: UInt32, presentationTimeStamp: CMTime, decodeTimeStamp: CMTime, timestamp: CMTime, config: AVCDecoderConfigurationRecord?) {
|
||||
guard let bytes = bytes else {
|
||||
return nil
|
||||
}
|
||||
if let config: AVCConfigurationRecord = config {
|
||||
if let config: AVCDecoderConfigurationRecord = config {
|
||||
data.append(contentsOf: [0x00, 0x00, 0x00, 0x01, 0x09, 0x10])
|
||||
data.append(contentsOf: [0x00, 0x00, 0x00, 0x01])
|
||||
data.append(contentsOf: config.sequenceParameterSets[0])
|
||||
|
|
|
@ -11,7 +11,7 @@ public protocol TSReaderDelegate: AnyObject {
|
|||
/// The TSReader class represents read MPEG-2 transport stream data.
|
||||
public class TSReader {
|
||||
/// Specifies the delegate object.
|
||||
public weak var delegate: TSReaderDelegate?
|
||||
public weak var delegate: (any TSReaderDelegate)?
|
||||
|
||||
private var pat: TSProgramAssociation? {
|
||||
didSet {
|
||||
|
@ -38,7 +38,7 @@ public class TSReader {
|
|||
}
|
||||
}
|
||||
}
|
||||
private var nalUnitReader = NALUnitReader()
|
||||
private var nalUnitReader = AVCNALUnitReader()
|
||||
private var programs: [UInt16: UInt16] = [:]
|
||||
private var esSpecData: [UInt16: ESSpecificData] = [:]
|
||||
private var formatDescriptions: [UInt16: CMFormatDescription] = [:]
|
||||
|
|
|
@ -21,7 +21,7 @@ public class TSWriter: Running {
|
|||
public static let defaultSegmentDuration: Double = 2
|
||||
|
||||
/// The delegate instance.
|
||||
public weak var delegate: TSWriterDelegate?
|
||||
public weak var delegate: (any TSWriterDelegate)?
|
||||
/// This instance is running to process(true) or not(false).
|
||||
public internal(set) var isRunning: Atomic<Bool> = .init(false)
|
||||
/// The exptected medias = [.video, .audio].
|
||||
|
@ -45,7 +45,7 @@ public class TSWriter: Running {
|
|||
writeProgramIfNeeded()
|
||||
}
|
||||
}
|
||||
private var videoConfig: AVCConfigurationRecord? {
|
||||
private var videoConfig: AVCDecoderConfigurationRecord? {
|
||||
didSet {
|
||||
writeProgramIfNeeded()
|
||||
}
|
||||
|
@ -244,7 +244,7 @@ extension TSWriter: VideoCodecDelegate {
|
|||
public func videoCodec(_ codec: VideoCodec, didOutput formatDescription: CMFormatDescription?) {
|
||||
guard
|
||||
let formatDescription,
|
||||
let avcC = AVCConfigurationRecord.getData(formatDescription) else {
|
||||
let avcC = AVCDecoderConfigurationRecord.getData(formatDescription) else {
|
||||
return
|
||||
}
|
||||
var data = ESSpecificData()
|
||||
|
@ -252,7 +252,7 @@ extension TSWriter: VideoCodecDelegate {
|
|||
data.elementaryPID = TSWriter.defaultVideoPID
|
||||
PMT.elementaryStreamSpecificData.append(data)
|
||||
videoContinuityCounter = 0
|
||||
videoConfig = AVCConfigurationRecord(data: avcC)
|
||||
videoConfig = AVCDecoderConfigurationRecord(data: avcC)
|
||||
}
|
||||
|
||||
public func videoCodec(_ codec: VideoCodec, didOutput sampleBuffer: CMSampleBuffer) {
|
||||
|
|
|
@ -7,12 +7,12 @@ typealias DisplayLink = CADisplayLink
|
|||
#endif
|
||||
|
||||
protocol ChoreographerDelegate: AnyObject {
|
||||
func choreographer(_ choreographer: Choreographer, didFrame duration: Double)
|
||||
func choreographer(_ choreographer: any Choreographer, didFrame duration: Double)
|
||||
}
|
||||
|
||||
protocol Choreographer: Running {
|
||||
var isPaused: Bool { get set }
|
||||
var delegate: ChoreographerDelegate? { get set }
|
||||
var delegate: (any ChoreographerDelegate)? { get set }
|
||||
|
||||
func clear()
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ final class DisplayLinkChoreographer: NSObject, Choreographer {
|
|||
displayLink?.isPaused = newValue
|
||||
}
|
||||
}
|
||||
weak var delegate: ChoreographerDelegate?
|
||||
weak var delegate: (any ChoreographerDelegate)?
|
||||
var isRunning: Atomic<Bool> = .init(false)
|
||||
private var duration: Double = DisplayLinkChoreographer.duration
|
||||
private var displayLink: DisplayLink? {
|
||||
|
|
|
@ -60,7 +60,7 @@ final class IOAudioUnit: NSObject, IOUnit {
|
|||
if isFragmented(sampleBuffer), let sampleBuffer = makeSampleBuffer(sampleBuffer) {
|
||||
appendSampleBuffer(sampleBuffer)
|
||||
}
|
||||
mixer?.recorder.appendSampleBuffer(sampleBuffer, mediaType: .audio)
|
||||
mixer?.recorder.appendSampleBuffer(sampleBuffer)
|
||||
codec.appendSampleBuffer(sampleBuffer)
|
||||
presentationTimeStamp = CMTimeAdd(presentationTimeStamp, CMTime(value: CMTimeValue(sampleBuffer.numSamples), timescale: presentationTimeStamp.timescale))
|
||||
}
|
||||
|
@ -86,53 +86,13 @@ final class IOAudioUnit: NSObject, IOUnit {
|
|||
guard 0 < numSamples else {
|
||||
return nil
|
||||
}
|
||||
var status: OSStatus = noErr
|
||||
var sampleBuffer: CMSampleBuffer?
|
||||
var timing = CMSampleTimingInfo(
|
||||
duration: CMTime(value: 1, timescale: presentationTimeStamp.timescale),
|
||||
presentationTimeStamp: presentationTimeStamp,
|
||||
decodeTimeStamp: .invalid
|
||||
)
|
||||
status = CMSampleBufferCreate(
|
||||
allocator: kCFAllocatorDefault,
|
||||
dataBuffer: nil,
|
||||
dataReady: true,
|
||||
makeDataReadyCallback: nil,
|
||||
refcon: nil,
|
||||
formatDescription: buffer.formatDescription,
|
||||
sampleCount: numSamples,
|
||||
sampleTimingEntryCount: 1,
|
||||
sampleTimingArray: &timing,
|
||||
sampleSizeEntryCount: 0,
|
||||
sampleSizeArray: nil,
|
||||
sampleBufferOut: &sampleBuffer
|
||||
)
|
||||
guard
|
||||
let sampleBuffer = sampleBuffer,
|
||||
let formatDescription = sampleBuffer.formatDescription, status == noErr else {
|
||||
return nil
|
||||
}
|
||||
guard let buffer = AVAudioPCMBuffer(pcmFormat: AVAudioFormat(cmAudioFormatDescription: formatDescription), frameCapacity: AVAudioFrameCount(numSamples)) else {
|
||||
return nil
|
||||
}
|
||||
buffer.frameLength = buffer.frameCapacity
|
||||
status = CMSampleBufferSetDataBufferFromAudioBufferList(
|
||||
sampleBuffer,
|
||||
blockBufferAllocator: kCFAllocatorDefault,
|
||||
blockBufferMemoryAllocator: kCFAllocatorDefault,
|
||||
flags: 0,
|
||||
bufferList: buffer.audioBufferList
|
||||
)
|
||||
guard status == noErr else {
|
||||
return nil
|
||||
}
|
||||
return sampleBuffer
|
||||
return CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: numSamples, presentationTimeStamp: presentationTimeStamp)
|
||||
}
|
||||
}
|
||||
|
||||
extension IOAudioUnit: IOUnitEncoding {
|
||||
// MARK: IOUnitEncoding
|
||||
func startEncoding(_ delegate: AVCodecDelegate) {
|
||||
func startEncoding(_ delegate: any AVCodecDelegate) {
|
||||
codec.delegate = delegate
|
||||
codec.startRunning()
|
||||
}
|
||||
|
|
|
@ -95,8 +95,8 @@ public class IOVideoCaptureUnit: IOCaptureUnit {
|
|||
}
|
||||
}
|
||||
|
||||
#if os(iOS)
|
||||
/// Specifies the preferredVideoStabilizationMode most appropriate for use with the connection.
|
||||
@available(macOS, unavailable)
|
||||
public var preferredVideoStabilizationMode: AVCaptureVideoStabilizationMode = .off {
|
||||
didSet {
|
||||
output?.connections.filter { $0.isVideoStabilizationSupported }.forEach {
|
||||
|
@ -104,6 +104,7 @@ public class IOVideoCaptureUnit: IOCaptureUnit {
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
func attachDevice(_ device: AVCaptureDevice?, videoUnit: IOVideoUnit) throws {
|
||||
setSampleBufferDelegate(nil)
|
||||
|
|
|
@ -19,6 +19,7 @@ protocol IOMixerDelegate: AnyObject {
|
|||
func mixer(_ mixer: IOMixer, sessionWasInterrupted session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason)
|
||||
func mixer(_ mixer: IOMixer, sessionInterruptionEnded session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason)
|
||||
#endif
|
||||
func mixerSessionWillResume(_ mixer: IOMixer)
|
||||
}
|
||||
|
||||
/// An object that mixies audio and video for streaming.
|
||||
|
@ -128,7 +129,7 @@ public class IOMixer {
|
|||
public lazy var recorder = IORecorder()
|
||||
|
||||
/// Specifies the drawable object.
|
||||
public weak var drawable: NetStreamDrawable? {
|
||||
public weak var drawable: (any NetStreamDrawable)? {
|
||||
get {
|
||||
videoIO.drawable
|
||||
}
|
||||
|
@ -139,7 +140,7 @@ public class IOMixer {
|
|||
|
||||
var mediaSync = MediaSync.passthrough
|
||||
|
||||
weak var delegate: IOMixerDelegate?
|
||||
weak var delegate: (any IOMixerDelegate)?
|
||||
|
||||
lazy var audioIO: IOAudioUnit = {
|
||||
var audioIO = IOAudioUnit()
|
||||
|
@ -237,7 +238,7 @@ public class IOMixer {
|
|||
|
||||
extension IOMixer: IOUnitEncoding {
|
||||
/// Starts encoding for video and audio data.
|
||||
public func startEncoding(_ delegate: AVCodecDelegate) {
|
||||
public func startEncoding(_ delegate: any AVCodecDelegate) {
|
||||
guard readyState == .standby else {
|
||||
return
|
||||
}
|
||||
|
@ -286,7 +287,7 @@ extension IOMixer: IOUnitDecoding {
|
|||
extension IOMixer: MediaLinkDelegate {
|
||||
// MARK: MediaLinkDelegate
|
||||
func mediaLink(_ mediaLink: MediaLink, dequeue sampleBuffer: CMSampleBuffer) {
|
||||
videoIO.codec.appendSampleBuffer(sampleBuffer)
|
||||
drawable?.enqueue(sampleBuffer)
|
||||
}
|
||||
|
||||
func mediaLink(_ mediaLink: MediaLink, didBufferingChanged: Bool) {
|
||||
|
@ -323,6 +324,11 @@ extension IOMixer: Running {
|
|||
isRunning.mutate { $0 = session.isRunning }
|
||||
}
|
||||
|
||||
func startCaptureSession() {
|
||||
session.startRunning()
|
||||
isRunning.mutate { $0 = session.isRunning }
|
||||
}
|
||||
|
||||
private func addSessionObservers(_ session: AVCaptureSession) {
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(sessionRuntimeError(_:)), name: .AVCaptureSessionRuntimeError, object: session)
|
||||
#if os(iOS)
|
||||
|
@ -438,8 +444,7 @@ extension IOMixer: Running {
|
|||
guard isRunning.value && !session.isRunning else {
|
||||
return
|
||||
}
|
||||
session.startRunning()
|
||||
isRunning.mutate { $0 = session.isRunning }
|
||||
delegate?.mixerSessionWillResume(self)
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
@ -449,5 +454,8 @@ extension IOMixer: Running {
|
|||
|
||||
public func stopRunning() {
|
||||
}
|
||||
|
||||
func startCaptureSession() {
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -38,7 +38,7 @@ public class IORecorder {
|
|||
]
|
||||
|
||||
/// Specifies the delegate.
|
||||
public weak var delegate: IORecorderDelegate?
|
||||
public weak var delegate: (any IORecorderDelegate)?
|
||||
/// Specifies the recorder settings.
|
||||
public var outputSettings: [AVMediaType: [String: Any]] = IORecorder.defaultOutputSettings
|
||||
/// The running indicies whether recording or not.
|
||||
|
@ -54,8 +54,9 @@ public class IORecorder {
|
|||
private var writer: AVAssetWriter?
|
||||
private var writerInputs: [AVMediaType: AVAssetWriterInput] = [:]
|
||||
private var pixelBufferAdaptor: AVAssetWriterInputPixelBufferAdaptor?
|
||||
private var audioPresentationTime = CMTime.zero
|
||||
private var videoPresentationTime = CMTime.zero
|
||||
private var audioPresentationTime: CMTime = .zero
|
||||
private var videoPresentationTime: CMTime = .zero
|
||||
private var dimensions: CMVideoDimensions = .init(width: 0, height: 0)
|
||||
|
||||
#if os(iOS)
|
||||
private lazy var moviesDirectory: URL = {
|
||||
|
@ -68,7 +69,11 @@ public class IORecorder {
|
|||
#endif
|
||||
|
||||
/// Append a sample buffer for recording.
|
||||
public func appendSampleBuffer(_ sampleBuffer: CMSampleBuffer, mediaType: AVMediaType) {
|
||||
public func appendSampleBuffer(_ sampleBuffer: CMSampleBuffer) {
|
||||
guard isRunning.value else {
|
||||
return
|
||||
}
|
||||
let mediaType: AVMediaType = (sampleBuffer.formatDescription?._mediaType == kCMMediaType_Video) ? .video : .audio
|
||||
lockQueue.async {
|
||||
guard
|
||||
let writer = self.writer,
|
||||
|
@ -108,10 +113,16 @@ public class IORecorder {
|
|||
|
||||
/// Append a pixel buffer for recording.
|
||||
public func appendPixelBuffer(_ pixelBuffer: CVPixelBuffer, withPresentationTime: CMTime) {
|
||||
guard isRunning.value else {
|
||||
return
|
||||
}
|
||||
lockQueue.async {
|
||||
if self.dimensions.width != pixelBuffer.width || self.dimensions.height != pixelBuffer.height {
|
||||
self.dimensions = .init(width: Int32(pixelBuffer.width), height: Int32(pixelBuffer.height))
|
||||
}
|
||||
guard
|
||||
let writer = self.writer,
|
||||
let input = self.makeWriterInput(.video, sourceFormatHint: CMVideoFormatDescription.create(pixelBuffer: pixelBuffer)),
|
||||
let input = self.makeWriterInput(.video, sourceFormatHint: nil),
|
||||
let adaptor = self.makePixelBufferAdaptor(input),
|
||||
self.isReadyForStartWriting && self.videoPresentationTime.seconds < withPresentationTime.seconds else {
|
||||
return
|
||||
|
@ -180,15 +191,12 @@ public class IORecorder {
|
|||
}
|
||||
}
|
||||
case .video:
|
||||
guard let format = sourceFormatHint else {
|
||||
break
|
||||
}
|
||||
for (key, value) in defaultOutputSettings {
|
||||
switch key {
|
||||
case AVVideoHeightKey:
|
||||
outputSettings[key] = AnyUtil.isZero(value) ? Int(format.dimensions.height) : value
|
||||
outputSettings[key] = AnyUtil.isZero(value) ? Int(dimensions.height) : value
|
||||
case AVVideoWidthKey:
|
||||
outputSettings[key] = AnyUtil.isZero(value) ? Int(format.dimensions.width) : value
|
||||
outputSettings[key] = AnyUtil.isZero(value) ? Int(dimensions.width) : value
|
||||
default:
|
||||
outputSettings[key] = value
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import Foundation
|
|||
/// The interface a capture session uses to inform its delegate.
|
||||
public protocol IOScreenCaptureUnitDelegate: AnyObject {
|
||||
/// Tells the receiver to output a pixel buffer.
|
||||
func session(_ session: IOScreenCaptureUnit, didOutput pixelBuffer: CVPixelBuffer, presentationTime: CMTime)
|
||||
func session(_ session: any IOScreenCaptureUnit, didOutput pixelBuffer: CVPixelBuffer, presentationTime: CMTime)
|
||||
}
|
||||
|
||||
/// The interface that provides methods to screen capture.
|
||||
|
@ -12,5 +12,5 @@ public protocol IOScreenCaptureUnit: Running {
|
|||
/// Specifies the CVPixelBufferPool's attributes.
|
||||
var attributes: [NSString: NSObject] { get }
|
||||
/// Specifies the delegate.
|
||||
var delegate: IOScreenCaptureUnitDelegate? { get set }
|
||||
var delegate: (any IOScreenCaptureUnitDelegate)? { get set }
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ public class IOUIScreenCaptureUnit: NSObject, IOScreenCaptureUnit {
|
|||
attributes[kCVPixelBufferBytesPerRowAlignmentKey] = NSNumber(value: Float(size.width * scale * 4))
|
||||
return attributes
|
||||
}
|
||||
public weak var delegate: IOScreenCaptureUnitDelegate?
|
||||
public weak var delegate: (any IOScreenCaptureUnitDelegate)?
|
||||
public private(set) var isRunning: Atomic<Bool> = .init(false)
|
||||
|
||||
private var shared: UIApplication?
|
||||
|
|
|
@ -12,7 +12,7 @@ protocol IOUnit {
|
|||
}
|
||||
|
||||
protocol IOUnitEncoding {
|
||||
func startEncoding(_ delegate: AVCodecDelegate)
|
||||
func startEncoding(_ delegate: any AVCodecDelegate)
|
||||
func stopEncoding()
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ final class IOVideoUnit: NSObject, IOUnit {
|
|||
}
|
||||
}
|
||||
|
||||
weak var drawable: NetStreamDrawable? {
|
||||
weak var drawable: (any NetStreamDrawable)? {
|
||||
didSet {
|
||||
#if os(iOS) || os(macOS)
|
||||
drawable?.videoOrientation = videoOrientation
|
||||
|
@ -132,6 +132,17 @@ final class IOVideoUnit: NSObject, IOUnit {
|
|||
guard let mixer, self.capture.device != device else {
|
||||
return
|
||||
}
|
||||
guard let device else {
|
||||
mixer.mediaSync = .passthrough
|
||||
mixer.session.beginConfiguration()
|
||||
defer {
|
||||
mixer.session.commitConfiguration()
|
||||
}
|
||||
capture.detachSession(mixer.session)
|
||||
try capture.attachDevice(nil, videoUnit: self)
|
||||
return
|
||||
}
|
||||
mixer.mediaSync = .video
|
||||
mixer.session.beginConfiguration()
|
||||
defer {
|
||||
mixer.session.commitConfiguration()
|
||||
|
@ -139,11 +150,6 @@ final class IOVideoUnit: NSObject, IOUnit {
|
|||
setTorchMode(.on)
|
||||
}
|
||||
}
|
||||
guard let device else {
|
||||
mixer.mediaSync = .passthrough
|
||||
return
|
||||
}
|
||||
mixer.mediaSync = .video
|
||||
if multiCamCapture.device == device {
|
||||
try multiCamCapture.attachDevice(nil, videoUnit: self)
|
||||
}
|
||||
|
@ -288,7 +294,7 @@ final class IOVideoUnit: NSObject, IOUnit {
|
|||
|
||||
extension IOVideoUnit: IOUnitEncoding {
|
||||
// MARK: IOUnitEncoding
|
||||
func startEncoding(_ delegate: AVCodecDelegate) {
|
||||
func startEncoding(_ delegate: any AVCodecDelegate) {
|
||||
codec.delegate = delegate
|
||||
codec.startRunning()
|
||||
}
|
||||
|
@ -336,7 +342,7 @@ extension IOVideoUnit: VideoCodecDelegate {
|
|||
}
|
||||
|
||||
func videoCodec(_ codec: VideoCodec, didOutput sampleBuffer: CMSampleBuffer) {
|
||||
drawable?.enqueue(sampleBuffer)
|
||||
mixer?.mediaLink.enqueueVideo(sampleBuffer)
|
||||
}
|
||||
|
||||
func videoCodec(_ codec: VideoCodec, errorOccurred error: VideoCodec.Error) {
|
||||
|
|
|
@ -20,7 +20,7 @@ public class MTHKView: MTKView {
|
|||
private var currentSampleBuffer: CMSampleBuffer?
|
||||
private let colorSpace: CGColorSpace = CGColorSpaceCreateDeviceRGB()
|
||||
|
||||
private lazy var commandQueue: MTLCommandQueue? = {
|
||||
private lazy var commandQueue: (any MTLCommandQueue)? = {
|
||||
return device?.makeCommandQueue()
|
||||
}()
|
||||
|
||||
|
|
|
@ -32,10 +32,9 @@ final class MediaLink {
|
|||
}
|
||||
var hasVideo = false
|
||||
var bufferTime = MediaLink.bufferTime
|
||||
weak var delegate: MediaLinkDelegate?
|
||||
weak var delegate: (any MediaLinkDelegate)?
|
||||
private(set) lazy var playerNode = AVAudioPlayerNode()
|
||||
private(set) var isRunning: Atomic<Bool> = .init(false)
|
||||
private var buffer: RingBuffer<CMSampleBuffer> = .init(256)
|
||||
private var isBuffering = true {
|
||||
didSet {
|
||||
if !isBuffering {
|
||||
|
@ -46,14 +45,15 @@ final class MediaLink {
|
|||
}
|
||||
}
|
||||
private var bufferingTime = MediaLink.bufferingTime
|
||||
private lazy var choreographer: Choreographer = {
|
||||
private lazy var choreographer: any Choreographer = {
|
||||
var choreographer = DisplayLinkChoreographer()
|
||||
choreographer.delegate = self
|
||||
return choreographer
|
||||
}()
|
||||
private let lockQueue = DispatchQueue(label: "com.haishinkit.HaishinKit.DisplayLinkedQueue.lock")
|
||||
private var bufferQueue: CMBufferQueue?
|
||||
private var scheduledAudioBuffers: Atomic<Int> = .init(0)
|
||||
private var presentationTimeStampOrigin: CMTime = .invalid
|
||||
private let lockQueue = DispatchQueue(label: "com.haishinkit.HaishinKit.DisplayLinkedQueue.lock")
|
||||
|
||||
func enqueueVideo(_ buffer: CMSampleBuffer) {
|
||||
guard buffer.presentationTimeStamp != .invalid else {
|
||||
|
@ -66,7 +66,9 @@ final class MediaLink {
|
|||
delegate?.mediaLink(self, dequeue: buffer)
|
||||
return
|
||||
}
|
||||
_ = self.buffer.append(buffer)
|
||||
if let bufferQueue {
|
||||
CMBufferQueueEnqueue(bufferQueue, buffer: buffer)
|
||||
}
|
||||
if isBuffering {
|
||||
bufferingTime += buffer.duration.seconds
|
||||
if bufferTime <= bufferingTime {
|
||||
|
@ -106,21 +108,34 @@ final class MediaLink {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func makeBufferkQueue() {
|
||||
CMBufferQueueCreate(
|
||||
allocator: kCFAllocatorDefault,
|
||||
capacity: 256,
|
||||
callbacks: CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS(),
|
||||
queueOut: &bufferQueue
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension MediaLink: ChoreographerDelegate {
|
||||
// MARK: ChoreographerDelegate
|
||||
func choreographer(_ choreographer: Choreographer, didFrame duration: Double) {
|
||||
func choreographer(_ choreographer: any Choreographer, didFrame duration: Double) {
|
||||
guard let bufferQueue else {
|
||||
return
|
||||
}
|
||||
let duration = self.duration(duration)
|
||||
var frameCount = 0
|
||||
while !buffer.isEmpty {
|
||||
guard let first = buffer.first else {
|
||||
while !CMBufferQueueIsEmpty(bufferQueue) {
|
||||
guard let head = CMBufferQueueGetHead(bufferQueue) else {
|
||||
break
|
||||
}
|
||||
let first = head as! CMSampleBuffer
|
||||
if first.presentationTimeStamp.seconds - presentationTimeStampOrigin.seconds <= duration {
|
||||
delegate?.mediaLink(self, dequeue: first)
|
||||
frameCount += 1
|
||||
buffer.removeFirst()
|
||||
CMBufferQueueDequeue(bufferQueue)
|
||||
} else {
|
||||
if 2 < frameCount {
|
||||
logger.info("droppedFrame: \(frameCount)")
|
||||
|
@ -143,6 +158,7 @@ extension MediaLink: Running {
|
|||
self.bufferingTime = Self.bufferingTime
|
||||
self.isBuffering = true
|
||||
self.choreographer.startRunning()
|
||||
self.makeBufferkQueue()
|
||||
self.isRunning.mutate { $0 = true }
|
||||
}
|
||||
}
|
||||
|
@ -153,7 +169,7 @@ extension MediaLink: Running {
|
|||
return
|
||||
}
|
||||
self.choreographer.stopRunning()
|
||||
self.buffer.removeAll()
|
||||
self.bufferQueue = nil
|
||||
self.scheduledAudioBuffers.mutate { $0 = 0 }
|
||||
self.presentationTimeStampOrigin = .invalid
|
||||
self.isRunning.mutate { $0 = false }
|
||||
|
|
|
@ -14,7 +14,7 @@ protocol NetClientDelegate: AnyObject {
|
|||
// MARK: -
|
||||
/// The NetClient class creates a two-way connection between a NetService.
|
||||
public final class NetClient: NetSocket {
|
||||
weak var delegate: NetClientDelegate?
|
||||
weak var delegate: (any NetClientDelegate)?
|
||||
|
||||
init(inputStream: InputStream, outputStream: OutputStream) {
|
||||
super.init()
|
||||
|
|
|
@ -40,9 +40,13 @@ open class NetStream: NSObject {
|
|||
private static let queueValue = UnsafeMutableRawPointer.allocate(byteCount: 1, alignment: 1)
|
||||
|
||||
/// The mixer object.
|
||||
public private(set) var mixer = IOMixer()
|
||||
public private(set) lazy var mixer: IOMixer = {
|
||||
let mixer = IOMixer()
|
||||
mixer.delegate = self
|
||||
return mixer
|
||||
}()
|
||||
/// Specifies the delegate of the NetStream.
|
||||
public weak var delegate: NetStreamDelegate?
|
||||
public weak var delegate: (any NetStreamDelegate)?
|
||||
|
||||
/// Specifies the context object.
|
||||
public var context: CIContext {
|
||||
|
@ -271,7 +275,7 @@ open class NetStream: NSObject {
|
|||
}
|
||||
|
||||
/// Starts recording.
|
||||
public func startRecording(_ settings: [AVMediaType: [String: Any]]) {
|
||||
public func startRecording(_ settings: [AVMediaType: [String: Any]] = IORecorder.defaultOutputSettings) {
|
||||
mixer.recorder.outputSettings = settings
|
||||
mixer.recorder.startRunning()
|
||||
}
|
||||
|
@ -282,9 +286,36 @@ open class NetStream: NSObject {
|
|||
}
|
||||
}
|
||||
|
||||
extension NetStream: IOMixerDelegate {
|
||||
// MARK: IOMixerDelegate
|
||||
func mixer(_ mixer: IOMixer, didOutput video: CMSampleBuffer) {
|
||||
delegate?.stream(self, didOutput: video)
|
||||
}
|
||||
|
||||
func mixer(_ mixer: IOMixer, didOutput audio: AVAudioPCMBuffer, presentationTimeStamp: CMTime) {
|
||||
delegate?.stream(self, didOutput: audio, presentationTimeStamp: presentationTimeStamp)
|
||||
}
|
||||
|
||||
func mixerSessionWillResume(_ mixer: IOMixer) {
|
||||
lockQueue.async {
|
||||
mixer.startCaptureSession()
|
||||
}
|
||||
}
|
||||
|
||||
#if os(iOS)
|
||||
func mixer(_ mixer: IOMixer, sessionWasInterrupted session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) {
|
||||
delegate?.stream(self, sessionWasInterrupted: session, reason: reason)
|
||||
}
|
||||
|
||||
func mixer(_ mixer: IOMixer, sessionInterruptionEnded session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) {
|
||||
delegate?.stream(self, sessionInterruptionEnded: session, reason: reason)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
extension NetStream: IOScreenCaptureUnitDelegate {
|
||||
// MARK: IOScreenCaptureUnitDelegate
|
||||
public func session(_ session: IOScreenCaptureUnit, didOutput pixelBuffer: CVPixelBuffer, presentationTime: CMTime) {
|
||||
public func session(_ session: any IOScreenCaptureUnit, didOutput pixelBuffer: CVPixelBuffer, presentationTime: CMTime) {
|
||||
var timingInfo = CMSampleTimingInfo(
|
||||
duration: .invalid,
|
||||
presentationTimeStamp: presentationTime,
|
||||
|
|
|
@ -40,6 +40,7 @@ final class RTMPChunk {
|
|||
case command = 0x03
|
||||
case audio = 0x04
|
||||
case video = 0x05
|
||||
case data = 0x08
|
||||
}
|
||||
|
||||
static let defaultSize: Int = 128
|
||||
|
|
|
@ -214,7 +214,7 @@ open class RTMPConnection: EventDispatcher {
|
|||
streams.count
|
||||
}
|
||||
/// Specifies the delegate of the NetStream.
|
||||
public weak var delegate: RTMPConnectionDelegate?
|
||||
public weak var delegate: (any RTMPConnectionDelegate)?
|
||||
/// The statistics of outgoing queue bytes per second.
|
||||
@objc open private(set) dynamic var previousQueueBytesOut: [Int64] = []
|
||||
/// The statistics of incoming bytes per second.
|
||||
|
@ -222,7 +222,7 @@ open class RTMPConnection: EventDispatcher {
|
|||
/// The statistics of outgoing bytes per second.
|
||||
@objc open private(set) dynamic var currentBytesOutPerSecond: Int32 = 0
|
||||
|
||||
var socket: RTMPSocketCompatible!
|
||||
var socket: (any RTMPSocketCompatible)!
|
||||
var streams: [RTMPStream] = []
|
||||
var sequence: Int64 = 0
|
||||
var bandWidth: UInt32 = 0
|
||||
|
@ -483,7 +483,7 @@ open class RTMPConnection: EventDispatcher {
|
|||
|
||||
extension RTMPConnection: RTMPSocketDelegate {
|
||||
// MARK: RTMPSocketDelegate
|
||||
func socket(_ socket: RTMPSocketCompatible, readyState: RTMPSocketReadyState) {
|
||||
func socket(_ socket: any RTMPSocketCompatible, readyState: RTMPSocketReadyState) {
|
||||
if logger.isEnabledFor(level: .debug) {
|
||||
logger.debug(readyState)
|
||||
}
|
||||
|
@ -509,7 +509,7 @@ extension RTMPConnection: RTMPSocketDelegate {
|
|||
}
|
||||
}
|
||||
|
||||
func socket(_ socket: RTMPSocketCompatible, totalBytesIn: Int64) {
|
||||
func socket(_ socket: any RTMPSocketCompatible, totalBytesIn: Int64) {
|
||||
guard windowSizeS * (sequence + 1) <= totalBytesIn else {
|
||||
return
|
||||
}
|
||||
|
@ -521,7 +521,7 @@ extension RTMPConnection: RTMPSocketDelegate {
|
|||
sequence += 1
|
||||
}
|
||||
|
||||
func socket(_ socket: RTMPSocketCompatible, data: Data) {
|
||||
func socket(_ socket: any RTMPSocketCompatible, data: Data) {
|
||||
guard let chunk = currentChunk ?? RTMPChunk(data, size: socket.chunkSizeC) else {
|
||||
socket.inputBuffer.append(data)
|
||||
return
|
||||
|
|
|
@ -314,7 +314,7 @@ final class RTMPCommandMessage: RTMPMessage {
|
|||
}
|
||||
}
|
||||
|
||||
private var serializer: AMFSerializer = AMF0Serializer()
|
||||
private var serializer: any AMFSerializer = AMF0Serializer()
|
||||
|
||||
init(objectEncoding: RTMPObjectEncoding) {
|
||||
self.objectEncoding = objectEncoding
|
||||
|
@ -362,7 +362,7 @@ final class RTMPDataMessage: RTMPMessage {
|
|||
var handlerName: String = ""
|
||||
var arguments: [Any?] = []
|
||||
|
||||
private var serializer: AMFSerializer = AMF0Serializer()
|
||||
private var serializer: any AMFSerializer = AMF0Serializer()
|
||||
|
||||
override var payload: Data {
|
||||
get {
|
||||
|
@ -413,11 +413,12 @@ final class RTMPDataMessage: RTMPMessage {
|
|||
super.init(type: objectEncoding.dataType)
|
||||
}
|
||||
|
||||
init(streamId: UInt32, objectEncoding: RTMPObjectEncoding, handlerName: String, arguments: [Any?] = []) {
|
||||
init(streamId: UInt32, objectEncoding: RTMPObjectEncoding, timestamp: UInt32, handlerName: String, arguments: [Any?] = []) {
|
||||
self.objectEncoding = objectEncoding
|
||||
self.handlerName = handlerName
|
||||
self.arguments = arguments
|
||||
super.init(type: objectEncoding.dataType)
|
||||
self.timestamp = timestamp
|
||||
self.streamId = streamId
|
||||
}
|
||||
|
||||
|
@ -493,7 +494,7 @@ final class RTMPSharedObjectMessage: RTMPMessage {
|
|||
}
|
||||
}
|
||||
|
||||
private var serializer: AMFSerializer = AMF0Serializer()
|
||||
private var serializer: any AMFSerializer = AMF0Serializer()
|
||||
|
||||
init(objectEncoding: RTMPObjectEncoding) {
|
||||
self.objectEncoding = objectEncoding
|
||||
|
@ -582,12 +583,12 @@ final class RTMPAudioMessage: RTMPMessage {
|
|||
default:
|
||||
stream.audioTimestamp += Double(timestamp)
|
||||
}
|
||||
switch FLVAACPacketType(rawValue: payload[1]) {
|
||||
case .seq?:
|
||||
switch payload[1] {
|
||||
case FLVAACPacketType.seq.rawValue:
|
||||
let config = AudioSpecificConfig(bytes: [UInt8](payload[codec.headerSize..<payload.count]))
|
||||
stream.mixer.audioIO.codec.settings.format = .pcm
|
||||
stream.mixer.audioIO.codec.inSourceFormat = config?.audioStreamBasicDescription()
|
||||
case .raw?:
|
||||
case FLVAACPacketType.raw.rawValue:
|
||||
if stream.mixer.audioIO.codec.inSourceFormat == nil {
|
||||
stream.mixer.audioIO.codec.settings.format = .pcm
|
||||
stream.mixer.audioIO.codec.inSourceFormat = makeAudioStreamBasicDescription()
|
||||
|
@ -595,7 +596,7 @@ final class RTMPAudioMessage: RTMPMessage {
|
|||
if let audioBuffer = makeAudioBuffer(stream) {
|
||||
stream.mixer.audioIO.codec.appendAudioBuffer(audioBuffer, presentationTimeStamp: CMTime(seconds: stream.audioTimestamp / 1000, preferredTimescale: 1000))
|
||||
}
|
||||
case .none:
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
@ -624,9 +625,6 @@ final class RTMPAudioMessage: RTMPMessage {
|
|||
7.1.5. Video Message (9)
|
||||
*/
|
||||
final class RTMPVideoMessage: RTMPMessage {
|
||||
private(set) var codec: FLVVideoCodec = .unknown
|
||||
private(set) var status: OSStatus = noErr
|
||||
|
||||
init() {
|
||||
super.init(type: .video)
|
||||
}
|
||||
|
@ -646,28 +644,41 @@ final class RTMPVideoMessage: RTMPMessage {
|
|||
guard FLVTagType.video.headerSize <= payload.count else {
|
||||
return
|
||||
}
|
||||
switch payload[1] {
|
||||
case FLVAVCPacketType.seq.rawValue:
|
||||
status = makeFormatDescription(stream)
|
||||
stream.mixer.mediaLink.hasVideo = true
|
||||
stream.dispatch(.rtmpStatus, bubbles: false, data: RTMPStream.Code.videoDimensionChange.data(""))
|
||||
case FLVAVCPacketType.nal.rawValue:
|
||||
if let sampleBuffer = makeSampleBuffer(stream, type: type) {
|
||||
sampleBuffer.isNotSync = !(payload[0] >> 4 == FLVFrameType.key.rawValue)
|
||||
stream.mixer.mediaLink.enqueueVideo(sampleBuffer)
|
||||
if (payload[0] & 0b10000000) == 0 {
|
||||
guard payload[0] & 0b01110000 >> 4 == FLVVideoCodec.avc.rawValue else {
|
||||
return
|
||||
}
|
||||
if stream.mixer.mediaLink.isPaused && stream.mixer.audioIO.codec.inSourceFormat == nil {
|
||||
stream.mixer.mediaLink.isPaused = false
|
||||
switch payload[1] {
|
||||
case FLVAVCPacketType.seq.rawValue:
|
||||
makeFormatDescription(stream, format: .h264)
|
||||
case FLVAVCPacketType.nal.rawValue:
|
||||
if let sampleBuffer = makeSampleBuffer(stream, type: type, offset: 0) {
|
||||
stream.mixer.videoIO.codec.appendSampleBuffer(sampleBuffer)
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
} else {
|
||||
// IsExHeader for Enhancing RTMP, FLV
|
||||
guard payload[1] == 0x68 && payload[2] == 0x76 && payload[3] == 0x63 && payload[4] == 0x31 else {
|
||||
return
|
||||
}
|
||||
switch payload[0] & 0b00001111 {
|
||||
case FLVVideoPacketType.sequenceStart.rawValue:
|
||||
makeFormatDescription(stream, format: .hevc)
|
||||
case FLVVideoPacketType.codedFrames.rawValue:
|
||||
if let sampleBuffer = makeSampleBuffer(stream, type: type, offset: 3) {
|
||||
stream.mixer.videoIO.codec.appendSampleBuffer(sampleBuffer)
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
private func makeSampleBuffer(_ stream: RTMPStream, type: RTMPChunkType) -> CMSampleBuffer? {
|
||||
let isBaseline = stream.mixer.videoIO.codec.isBaseline
|
||||
private func makeSampleBuffer(_ stream: RTMPStream, type: RTMPChunkType, offset: Int = 0) -> CMSampleBuffer? {
|
||||
// compositionTime -> SI24
|
||||
var compositionTime = isBaseline ? 0 : Int32(data: [0] + payload[2..<5]).bigEndian
|
||||
var compositionTime = Int32(data: [0] + payload[2 + offset..<5 + offset]).bigEndian
|
||||
compositionTime <<= 8
|
||||
compositionTime /= 256
|
||||
|
||||
|
@ -686,10 +697,10 @@ final class RTMPVideoMessage: RTMPMessage {
|
|||
var timing = CMSampleTimingInfo(
|
||||
duration: CMTimeMake(value: duration, timescale: 1000),
|
||||
presentationTimeStamp: CMTimeMake(value: Int64(stream.videoTimestamp) + Int64(compositionTime), timescale: 1000),
|
||||
decodeTimeStamp: .invalid
|
||||
decodeTimeStamp: compositionTime == 0 ? .invalid : CMTimeMake(value: Int64(stream.videoTimestamp), timescale: 1000)
|
||||
)
|
||||
|
||||
let blockBuffer = payload.makeBlockBuffer(advancedBy: FLVTagType.video.headerSize)
|
||||
let blockBuffer = payload.makeBlockBuffer(advancedBy: FLVTagType.video.headerSize + offset)
|
||||
var sampleBuffer: CMSampleBuffer?
|
||||
var sampleSize = blockBuffer?.dataLength ?? 0
|
||||
guard CMSampleBufferCreate(
|
||||
|
@ -707,14 +718,26 @@ final class RTMPVideoMessage: RTMPMessage {
|
|||
sampleBufferOut: &sampleBuffer) == noErr else {
|
||||
return nil
|
||||
}
|
||||
|
||||
sampleBuffer?.isNotSync = !(payload[0] >> 4 & 0b0111 == FLVFrameType.key.rawValue)
|
||||
return sampleBuffer
|
||||
}
|
||||
|
||||
private func makeFormatDescription(_ stream: RTMPStream) -> OSStatus {
|
||||
var config = AVCConfigurationRecord()
|
||||
config.data = payload.subdata(in: FLVTagType.video.headerSize..<payload.count)
|
||||
return config.makeFormatDescription(&stream.mixer.videoIO.formatDescription)
|
||||
private func makeFormatDescription(_ stream: RTMPStream, format: VideoCodecSettings.Format) {
|
||||
var status = noErr
|
||||
switch format {
|
||||
case .h264:
|
||||
var config = AVCDecoderConfigurationRecord()
|
||||
config.data = payload.subdata(in: FLVTagType.video.headerSize..<payload.count)
|
||||
status = config.makeFormatDescription(&stream.mixer.videoIO.formatDescription)
|
||||
case .hevc:
|
||||
var config = HEVCDecoderConfigurationRecord()
|
||||
config.data = payload.subdata(in: FLVTagType.video.headerSize..<payload.count)
|
||||
status = config.makeFormatDescription(&stream.mixer.videoIO.formatDescription)
|
||||
}
|
||||
if status == noErr {
|
||||
stream.mixer.mediaLink.hasVideo = true
|
||||
stream.dispatch(.rtmpStatus, bubbles: false, data: RTMPStream.Code.videoDimensionChange.data(""))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import AVFoundation
|
||||
|
||||
protocol RTMPMuxerDelegate: AnyObject {
|
||||
func muxer(_ muxer: RTMPMuxer, didSetMetadata: ASObject)
|
||||
func muxer(_ muxer: RTMPMuxer, didOutputAudio buffer: Data, withTimestamp: Double)
|
||||
func muxer(_ muxer: RTMPMuxer, didOutputVideo buffer: Data, withTimestamp: Double)
|
||||
func muxer(_ muxer: RTMPMuxer, audioCodecErrorOccurred error: AudioCodec.Error)
|
||||
|
@ -13,13 +12,14 @@ protocol RTMPMuxerDelegate: AnyObject {
|
|||
final class RTMPMuxer {
|
||||
static let aac: UInt8 = FLVAudioCodec.aac.rawValue << 4 | FLVSoundRate.kHz44.rawValue << 2 | FLVSoundSize.snd16bit.rawValue << 1 | FLVSoundType.stereo.rawValue
|
||||
|
||||
weak var delegate: RTMPMuxerDelegate?
|
||||
private var audioTimeStamp = CMTime.zero
|
||||
private var videoTimeStamp = CMTime.zero
|
||||
weak var delegate: (any RTMPMuxerDelegate)?
|
||||
private var audioTimeStamp: CMTime = .zero
|
||||
private var videoTimeStamp: CMTime = .zero
|
||||
private let compositiionTimeOffset: CMTime = .init(value: 3, timescale: 30)
|
||||
|
||||
func dispose() {
|
||||
audioTimeStamp = CMTime.zero
|
||||
videoTimeStamp = CMTime.zero
|
||||
audioTimeStamp = .zero
|
||||
videoTimeStamp = .zero
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,38 +55,58 @@ extension RTMPMuxer: VideoCodecDelegate {
|
|||
}
|
||||
|
||||
func videoCodec(_ codec: VideoCodec, didOutput formatDescription: CMFormatDescription?) {
|
||||
guard
|
||||
let formatDescription = formatDescription,
|
||||
let avcC = AVCConfigurationRecord.getData(formatDescription) else {
|
||||
guard let formatDescription else {
|
||||
return
|
||||
}
|
||||
var buffer = Data([FLVFrameType.key.rawValue << 4 | FLVVideoCodec.avc.rawValue, FLVAVCPacketType.seq.rawValue, 0, 0, 0])
|
||||
buffer.append(avcC)
|
||||
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: 0)
|
||||
switch codec.settings.format {
|
||||
case .h264:
|
||||
guard let avcC = AVCDecoderConfigurationRecord.getData(formatDescription) else {
|
||||
return
|
||||
}
|
||||
var buffer = Data([FLVFrameType.key.rawValue << 4 | FLVVideoCodec.avc.rawValue, FLVAVCPacketType.seq.rawValue, 0, 0, 0])
|
||||
buffer.append(avcC)
|
||||
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: 0)
|
||||
case .hevc:
|
||||
guard let hvcC = HEVCDecoderConfigurationRecord.getData(formatDescription) else {
|
||||
return
|
||||
}
|
||||
var buffer = Data([0b10000000 | FLVFrameType.key.rawValue << 4 | FLVVideoPacketType.sequenceStart.rawValue, 0x68, 0x76, 0x63, 0x31])
|
||||
buffer.append(hvcC)
|
||||
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: 0)
|
||||
}
|
||||
}
|
||||
|
||||
func videoCodec(_ codec: VideoCodec, didOutput sampleBuffer: CMSampleBuffer) {
|
||||
let keyframe = !sampleBuffer.isNotSync
|
||||
var compositionTime: Int32 = 0
|
||||
let presentationTimeStamp = sampleBuffer.presentationTimeStamp
|
||||
var decodeTimeStamp = sampleBuffer.decodeTimeStamp
|
||||
if decodeTimeStamp == CMTime.invalid {
|
||||
decodeTimeStamp = presentationTimeStamp
|
||||
} else {
|
||||
compositionTime = (videoTimeStamp == .zero) ? 0 : Int32((sampleBuffer.presentationTimeStamp.seconds - videoTimeStamp.seconds) * 1000)
|
||||
}
|
||||
let delta = (videoTimeStamp == .zero ? 0 : decodeTimeStamp.seconds - videoTimeStamp.seconds) * 1000
|
||||
let decodeTimeStamp = sampleBuffer.decodeTimeStamp.isValid ? sampleBuffer.decodeTimeStamp : sampleBuffer.presentationTimeStamp
|
||||
let compositionTime = getCompositionTime(sampleBuffer)
|
||||
let delta = (videoTimeStamp == .zero ? .zero : decodeTimeStamp - videoTimeStamp).seconds * 1000
|
||||
guard let data = sampleBuffer.dataBuffer?.data, 0 <= delta else {
|
||||
return
|
||||
}
|
||||
var buffer = Data([((keyframe ? FLVFrameType.key.rawValue : FLVFrameType.inter.rawValue) << 4) | FLVVideoCodec.avc.rawValue, FLVAVCPacketType.nal.rawValue])
|
||||
buffer.append(contentsOf: compositionTime.bigEndian.data[1..<4])
|
||||
buffer.append(data)
|
||||
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: delta)
|
||||
switch codec.settings.format {
|
||||
case .h264:
|
||||
var buffer = Data([((keyframe ? FLVFrameType.key.rawValue : FLVFrameType.inter.rawValue) << 4) | FLVVideoCodec.avc.rawValue, FLVAVCPacketType.nal.rawValue])
|
||||
buffer.append(contentsOf: compositionTime.bigEndian.data[1..<4])
|
||||
buffer.append(data)
|
||||
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: delta)
|
||||
case .hevc:
|
||||
var buffer = Data([0b10000000 | ((keyframe ? FLVFrameType.key.rawValue : FLVFrameType.inter.rawValue) << 4) | FLVVideoPacketType.codedFrames.rawValue, 0x68, 0x76, 0x63, 0x31])
|
||||
buffer.append(contentsOf: compositionTime.bigEndian.data[1..<4])
|
||||
buffer.append(data)
|
||||
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: delta)
|
||||
}
|
||||
videoTimeStamp = decodeTimeStamp
|
||||
}
|
||||
|
||||
func videoCodecWillDropFame(_ codec: VideoCodec) -> Bool {
|
||||
return delegate?.muxerWillDropFrame(self) ?? false
|
||||
}
|
||||
|
||||
private func getCompositionTime(_ sampleBuffer: CMSampleBuffer) -> Int32 {
|
||||
guard sampleBuffer.decodeTimeStamp.isValid, sampleBuffer.decodeTimeStamp != sampleBuffer.presentationTimeStamp else {
|
||||
return 0
|
||||
}
|
||||
return Int32((sampleBuffer.presentationTimeStamp - videoTimeStamp + compositiionTimeOffset).seconds * 1000)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ final class RTMPNWSocket: RTMPSocketCompatible {
|
|||
}
|
||||
var qualityOfService: DispatchQoS = .default
|
||||
var inputBuffer = Data()
|
||||
weak var delegate: RTMPSocketDelegate?
|
||||
weak var delegate: (any RTMPSocketDelegate)?
|
||||
|
||||
private(set) var queueBytesOut: Atomic<Int64> = .init(0)
|
||||
private(set) var totalBytesIn: Atomic<Int64> = .init(0)
|
||||
|
|
|
@ -30,7 +30,7 @@ struct RTMPSharedObjectEvent {
|
|||
self.data = data
|
||||
}
|
||||
|
||||
init?(serializer: inout AMFSerializer) throws {
|
||||
init?(serializer: inout any AMFSerializer) throws {
|
||||
guard let byte: UInt8 = try? serializer.readUInt8(), let type = RTMPSharedObjectType(rawValue: byte) else {
|
||||
return nil
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ struct RTMPSharedObjectEvent {
|
|||
}
|
||||
}
|
||||
|
||||
func serialize(_ serializer: inout AMFSerializer) {
|
||||
func serialize(_ serializer: inout any AMFSerializer) {
|
||||
serializer.writeUInt8(type.rawValue)
|
||||
guard let name: String = name else {
|
||||
serializer.writeUInt32(0)
|
||||
|
|
|
@ -12,7 +12,7 @@ final class RTMPSocket: NetSocket, RTMPSocketCompatible {
|
|||
}
|
||||
var chunkSizeC: Int = RTMPChunk.defaultSize
|
||||
var chunkSizeS: Int = RTMPChunk.defaultSize
|
||||
weak var delegate: RTMPSocketDelegate?
|
||||
weak var delegate: (any RTMPSocketDelegate)?
|
||||
private var handshake = RTMPHandshake()
|
||||
|
||||
override var totalBytesIn: Atomic<Int64> {
|
||||
|
|
|
@ -11,7 +11,7 @@ enum RTMPSocketReadyState: UInt8 {
|
|||
|
||||
protocol RTMPSocketCompatible: AnyObject {
|
||||
var timeout: Int { get set }
|
||||
var delegate: RTMPSocketDelegate? { get set }
|
||||
var delegate: (any RTMPSocketDelegate)? { get set }
|
||||
var connected: Bool { get }
|
||||
var timestamp: TimeInterval { get }
|
||||
var readyState: RTMPSocketReadyState { get set }
|
||||
|
@ -47,7 +47,7 @@ extension RTMPSocketCompatible {
|
|||
// MARK: -
|
||||
// swiftlint:disable class_delegate_protocol
|
||||
protocol RTMPSocketDelegate: EventDispatcherConvertible {
|
||||
func socket(_ socket: RTMPSocketCompatible, data: Data)
|
||||
func socket(_ socket: RTMPSocketCompatible, readyState: RTMPSocketReadyState)
|
||||
func socket(_ socket: RTMPSocketCompatible, totalBytesIn: Int64)
|
||||
func socket(_ socket: any RTMPSocketCompatible, data: Data)
|
||||
func socket(_ socket: any RTMPSocketCompatible, readyState: RTMPSocketReadyState)
|
||||
func socket(_ socket: any RTMPSocketCompatible, totalBytesIn: Int64)
|
||||
}
|
||||
|
|
|
@ -158,6 +158,16 @@ open class RTMPStream: NetStream {
|
|||
case publishing
|
||||
}
|
||||
|
||||
private struct PausedStatus {
|
||||
let hasAudio: Bool
|
||||
let hasVideo: Bool
|
||||
|
||||
init(hasAudio: Bool, hasVideo: Bool) {
|
||||
self.hasAudio = hasAudio
|
||||
self.hasVideo = hasVideo
|
||||
}
|
||||
}
|
||||
|
||||
static let defaultID: UInt32 = 0
|
||||
/// The NetStreamInfo object whose properties contain data.
|
||||
public internal(set) var info = RTMPStreamInfo()
|
||||
|
@ -216,8 +226,23 @@ open class RTMPStream: NetStream {
|
|||
lockQueue.async {
|
||||
switch self.readyState {
|
||||
case .publish, .publishing:
|
||||
self.hasVideo = self.paused
|
||||
self.hasAudio = self.paused
|
||||
if self.paused {
|
||||
self.pausedStatus = .init(hasAudio: self.hasAudio, hasVideo: self.hasVideo)
|
||||
self.hasAudio = false
|
||||
self.hasVideo = false
|
||||
} else {
|
||||
self.hasAudio = self.pausedStatus.hasAudio
|
||||
self.hasVideo = self.pausedStatus.hasVideo
|
||||
}
|
||||
case .play, .playing:
|
||||
self.rtmpConnection?.socket.doOutput(chunk: RTMPChunk(message: RTMPCommandMessage(
|
||||
streamId: self.id,
|
||||
transactionId: 0,
|
||||
objectEncoding: self.objectEncoding,
|
||||
commandName: "pause",
|
||||
commandObject: nil,
|
||||
arguments: [self.paused, floor(self.startedAt.timeIntervalSinceNow * -1000)]
|
||||
)))
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
@ -239,11 +264,14 @@ open class RTMPStream: NetStream {
|
|||
var videoTimestampZero: Double = -1.0
|
||||
private let muxer = RTMPMuxer()
|
||||
private var messages: [RTMPCommandMessage] = []
|
||||
private var startedAt = Date()
|
||||
private var frameCount: UInt16 = 0
|
||||
private var dispatcher: EventDispatcherConvertible!
|
||||
private var dispatcher: (any EventDispatcherConvertible)!
|
||||
private var audioWasSent = false
|
||||
private var videoWasSent = false
|
||||
private var pausedStatus = PausedStatus(hasAudio: false, hasVideo: false)
|
||||
private var howToPublish: RTMPStream.HowToPublish = .live
|
||||
private var dataTimeStamps: [String: Date] = .init()
|
||||
private weak var rtmpConnection: RTMPConnection?
|
||||
|
||||
/// Creates a new stream.
|
||||
|
@ -369,12 +397,20 @@ open class RTMPStream: NetStream {
|
|||
guard let rtmpConnection = self.rtmpConnection, self.readyState == .publishing else {
|
||||
return
|
||||
}
|
||||
let length = rtmpConnection.socket.doOutput(chunk: RTMPChunk(message: RTMPDataMessage(
|
||||
streamId: self.id,
|
||||
objectEncoding: self.objectEncoding,
|
||||
handlerName: handlerName,
|
||||
arguments: arguments
|
||||
)))
|
||||
let dataWasSent = self.dataTimeStamps[handlerName] == nil ? false : true
|
||||
let timestmap: UInt32 = dataWasSent ? UInt32((self.dataTimeStamps[handlerName]?.timeIntervalSinceNow ?? 0) * -1000) : UInt32(self.startedAt.timeIntervalSinceNow * -1000)
|
||||
let chunk = RTMPChunk(
|
||||
type: dataWasSent ? RTMPChunkType.one : RTMPChunkType.zero,
|
||||
streamId: RTMPChunk.StreamID.data.rawValue,
|
||||
message: RTMPDataMessage(
|
||||
streamId: self.id,
|
||||
objectEncoding: self.objectEncoding,
|
||||
timestamp: timestmap,
|
||||
handlerName: handlerName,
|
||||
arguments: arguments
|
||||
))
|
||||
let length = rtmpConnection.socket.doOutput(chunk: chunk)
|
||||
self.dataTimeStamps[handlerName] = .init()
|
||||
self.info.byteCount.mutate { $0 += Int64(length) }
|
||||
}
|
||||
}
|
||||
|
@ -387,7 +423,9 @@ open class RTMPStream: NetStream {
|
|||
metadata["width"] = mixer.videoIO.codec.settings.videoSize.width
|
||||
metadata["height"] = mixer.videoIO.codec.settings.videoSize.height
|
||||
metadata["framerate"] = mixer.videoIO.frameRate
|
||||
metadata["videocodecid"] = FLVVideoCodec.avc.rawValue
|
||||
if mixer.videoIO.codec.settings.format == .h264 {
|
||||
metadata["videocodecid"] = FLVVideoCodec.avc.rawValue
|
||||
}
|
||||
metadata["videodatarate"] = mixer.videoIO.codec.settings.bitRate / 1000
|
||||
}
|
||||
if mixer.audioIO.capture.device != nil {
|
||||
|
@ -468,6 +506,7 @@ open class RTMPStream: NetStream {
|
|||
}
|
||||
messages.removeAll()
|
||||
case .play:
|
||||
startedAt = .init()
|
||||
videoTimestamp = 0
|
||||
videoTimestampZero = -1.0
|
||||
audioTimestamp = 0
|
||||
|
@ -475,11 +514,13 @@ open class RTMPStream: NetStream {
|
|||
mixer.delegate = self
|
||||
mixer.startDecoding()
|
||||
case .publish:
|
||||
startedAt = .init()
|
||||
muxer.dispose()
|
||||
muxer.delegate = self
|
||||
mixer.startRunning()
|
||||
videoWasSent = false
|
||||
audioWasSent = false
|
||||
dataTimeStamps.removeAll()
|
||||
FCPublish()
|
||||
case .publishing:
|
||||
send(handlerName: "@setDataFrame", arguments: "onMetaData", createMetaData())
|
||||
|
@ -551,10 +592,6 @@ extension RTMPStream: EventDispatcherConvertible {
|
|||
|
||||
extension RTMPStream: RTMPMuxerDelegate {
|
||||
// MARK: RTMPMuxerDelegate
|
||||
func muxer(_ muxer: RTMPMuxer, didSetMetadata: ASObject) {
|
||||
send(handlerName: "@setDataFrame", arguments: "onMetaData", didSetMetadata)
|
||||
}
|
||||
|
||||
func muxer(_ muxer: RTMPMuxer, didOutputAudio buffer: Data, withTimestamp: Double) {
|
||||
guard let rtmpConnection, readyState == .publishing else {
|
||||
return
|
||||
|
@ -601,25 +638,3 @@ extension RTMPStream: RTMPMuxerDelegate {
|
|||
return delegate?.streamWillDropFrame(self) ?? false
|
||||
}
|
||||
}
|
||||
|
||||
extension RTMPStream: IOMixerDelegate {
|
||||
// MARK: IOMixerDelegate
|
||||
func mixer(_ mixer: IOMixer, didOutput video: CMSampleBuffer) {
|
||||
frameCount += 1
|
||||
delegate?.stream(self, didOutput: video)
|
||||
}
|
||||
|
||||
func mixer(_ mixer: IOMixer, didOutput audio: AVAudioPCMBuffer, presentationTimeStamp: CMTime) {
|
||||
delegate?.stream(self, didOutput: audio, presentationTimeStamp: presentationTimeStamp)
|
||||
}
|
||||
|
||||
#if os(iOS)
|
||||
func mixer(_ mixer: IOMixer, sessionWasInterrupted session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) {
|
||||
delegate?.stream(self, sessionWasInterrupted: session, reason: reason)
|
||||
}
|
||||
|
||||
func mixer(_ mixer: IOMixer, sessionInterruptionEnded session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) {
|
||||
delegate?.stream(self, sessionInterruptionEnded: session, reason: reason)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ final class RTMPTSocket: NSObject, RTMPSocketCompatible {
|
|||
var qualityOfService: DispatchQoS = .default
|
||||
var securityLevel: StreamSocketSecurityLevel = .none
|
||||
var outputBufferSize: Int = RTMPTSocket.defaultWindowSizeC
|
||||
weak var delegate: RTMPSocketDelegate?
|
||||
weak var delegate: (any RTMPSocketDelegate)?
|
||||
var connected = false {
|
||||
didSet {
|
||||
if connected {
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
import CoreMedia
|
||||
import Foundation
|
||||
|
||||
enum CMAudioSampleBufferUtil {
|
||||
static func makeSampleBuffer(_ buffer: CMSampleBuffer, numSamples: Int, presentationTimeStamp: CMTime) -> CMSampleBuffer? {
|
||||
guard 0 < numSamples, let formatDescription = buffer.formatDescription, let streamBasicDescription = formatDescription.streamBasicDescription else {
|
||||
return nil
|
||||
}
|
||||
var status: OSStatus = noErr
|
||||
var blockBuffer: CMBlockBuffer?
|
||||
let blockSize = numSamples * Int(streamBasicDescription.pointee.mBytesPerPacket)
|
||||
status = CMBlockBufferCreateWithMemoryBlock(
|
||||
allocator: nil,
|
||||
memoryBlock: nil,
|
||||
blockLength: blockSize,
|
||||
blockAllocator: nil,
|
||||
customBlockSource: nil,
|
||||
offsetToData: 0,
|
||||
dataLength: blockSize,
|
||||
flags: 0,
|
||||
blockBufferOut: &blockBuffer
|
||||
)
|
||||
guard let blockBuffer, status == noErr else {
|
||||
return nil
|
||||
}
|
||||
status = CMBlockBufferFillDataBytes(
|
||||
with: 0,
|
||||
blockBuffer: blockBuffer,
|
||||
offsetIntoDestination: 0,
|
||||
dataLength: blockSize
|
||||
)
|
||||
guard status == noErr else {
|
||||
return nil
|
||||
}
|
||||
var sampleBuffer: CMSampleBuffer?
|
||||
status = CMAudioSampleBufferCreateWithPacketDescriptions(
|
||||
allocator: nil,
|
||||
dataBuffer: blockBuffer,
|
||||
dataReady: true,
|
||||
makeDataReadyCallback: nil,
|
||||
refcon: nil,
|
||||
formatDescription: formatDescription,
|
||||
sampleCount: numSamples,
|
||||
presentationTimeStamp: presentationTimeStamp,
|
||||
packetDescriptions: nil,
|
||||
sampleBufferOut: &sampleBuffer
|
||||
)
|
||||
guard let sampleBuffer, status == noErr else {
|
||||
return nil
|
||||
}
|
||||
return sampleBuffer
|
||||
}
|
||||
}
|
|
@ -1,88 +0,0 @@
|
|||
import Foundation
|
||||
|
||||
struct RingBuffer<Element> {
|
||||
var first: Element? {
|
||||
buffer[top]
|
||||
}
|
||||
|
||||
var count: Int {
|
||||
if top == bottom {
|
||||
return first == nil ? 0 : buffer.count
|
||||
}
|
||||
let value = bottom - top
|
||||
return value < 0 ? value + buffer.count : value
|
||||
}
|
||||
|
||||
// swiftlint:disable empty_count
|
||||
var isEmpty: Bool {
|
||||
count == 0
|
||||
}
|
||||
|
||||
var isFull: Bool {
|
||||
return count == (mask + 1)
|
||||
}
|
||||
|
||||
private var top: Int = 0
|
||||
private var mask: Int = 0
|
||||
private var bottom: Int = 0
|
||||
private var buffer: [Element?]
|
||||
private let extensible: Bool
|
||||
|
||||
init(_ capacity: Int, extensible: Bool = true) {
|
||||
buffer = .init(repeating: nil, count: capacity)
|
||||
mask = capacity - 1
|
||||
self.extensible = extensible
|
||||
}
|
||||
|
||||
mutating func append(_ newElement: Element) -> Bool {
|
||||
guard !isFull else {
|
||||
return extend(newElement)
|
||||
}
|
||||
defer {
|
||||
bottom += 1
|
||||
bottom &= mask
|
||||
}
|
||||
buffer[bottom] = newElement
|
||||
return true
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
mutating func removeFirst() -> Element? {
|
||||
defer {
|
||||
buffer[top] = nil
|
||||
top += 1
|
||||
top &= mask
|
||||
}
|
||||
return buffer[top]
|
||||
}
|
||||
|
||||
mutating func removeAll() {
|
||||
for i in 0..<buffer.count {
|
||||
buffer[i] = nil
|
||||
}
|
||||
top = 0
|
||||
bottom = 0
|
||||
}
|
||||
|
||||
private mutating func extend(_ newElement: Element) -> Bool {
|
||||
guard extensible else {
|
||||
return false
|
||||
}
|
||||
let tail = buffer[0..<top]
|
||||
let head = buffer[top...]
|
||||
buffer.replaceSubrange(top..., with: tail)
|
||||
buffer.replaceSubrange(0..<top, with: head)
|
||||
bottom = count
|
||||
top = 0
|
||||
buffer.append(contentsOf: [Element?](repeating: nil, count: buffer.count))
|
||||
mask = buffer.count - 1
|
||||
return append(newElement)
|
||||
}
|
||||
}
|
||||
|
||||
extension RingBuffer: CustomStringConvertible {
|
||||
// MARK: CustomStringConvertible
|
||||
var description: String {
|
||||
buffer.description
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
import Foundation
|
||||
import XCTest
|
||||
import AVFoundation
|
||||
|
||||
@testable import HaishinKit
|
||||
|
||||
final class FLVVideoFourCCTests: XCTestCase {
|
||||
func testMain() {
|
||||
XCTAssertEqual("av01", str4(n: Int(FLVVideoFourCC.av1.rawValue)))
|
||||
XCTAssertEqual("hvc1", str4(n: Int(FLVVideoFourCC.hevc.rawValue)))
|
||||
XCTAssertEqual("vp09", str4(n: Int(FLVVideoFourCC.vp9.rawValue)))
|
||||
}
|
||||
|
||||
func str4(n: Int) -> String {
|
||||
var result = String(UnicodeScalar((n >> 24) & 255)?.description ?? "")
|
||||
result.append(UnicodeScalar((n >> 16) & 255)?.description ?? "")
|
||||
result.append(UnicodeScalar((n >> 8) & 255)?.description ?? "")
|
||||
result.append(UnicodeScalar(n & 255)?.description ?? "")
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
import Foundation
|
||||
import AVFoundation
|
||||
import XCTest
|
||||
|
||||
@testable import HaishinKit
|
||||
|
||||
final class HEVCDecoderConfigurationRecordTests: XCTestCase {
|
||||
func testMain() {
|
||||
let data = Data([1, 1, 96, 0, 0, 0, 176, 0, 0, 0, 0, 0, 93, 240, 0, 252, 253, 248, 248, 0, 0, 15, 3, 32, 0, 1, 0, 24, 64, 1, 12, 1, 255, 255, 1, 96, 0, 0, 3, 0, 176, 0, 0, 3, 0, 0, 3, 0, 93, 21, 192, 144, 33, 0, 1, 0, 36, 66, 1, 1, 1, 96, 0, 0, 3, 0, 176, 0, 0, 3, 0, 0, 3, 0, 93, 160, 2, 40, 128, 39, 28, 178, 226, 5, 123, 145, 101, 83, 80, 16, 16, 16, 8, 34, 0, 1, 0, 7, 68, 1, 192, 44, 188, 20, 201])
|
||||
let hevc = HEVCDecoderConfigurationRecord(data: data)
|
||||
var formatDescription: CMFormatDescription?
|
||||
_ = hevc.makeFormatDescription(&formatDescription)
|
||||
XCTAssertNotNil(formatDescription)
|
||||
}
|
||||
}
|
|
@ -7,7 +7,7 @@ import XCTest
|
|||
final class NALUnitReaderTests: XCTestCase {
|
||||
func testMain() {
|
||||
let data = Data([0, 0, 0, 1, 9, 240, 0, 0, 0, 1, 103, 77, 64, 13, 218, 5, 7, 236, 4, 64, 0, 0, 3, 0, 64, 0, 0, 7, 131, 197, 10, 168, 0, 0, 0, 1, 104, 239, 60, 128, 0, 0, 0, 1, 101, 136, 130, 1, 15, 250, 120, 30, 255, 244, 55, 157, 215, 115, 255, 239, 112, 39, 83, 211, 17, 103, 152, 229, 241, 131, 49, 7, 123, 10, 145, 184, 0, 0, 3, 3, 133, 122, 49, 20, 214, 115, 51, 202, 59, 43, 204, 79, 27, 229, 101, 135, 60, 234, 243, 78, 210, 98, 30, 252, 36, 38, 20, 202, 41, 121, 70, 45, 15, 54, 125, 153, 199, 236, 90, 142, 247, 27, 202, 17, 205, 77, 133, 21, 189, 212, 159, 87, 222, 100, 53, 75, 211, 139, 219, 83, 89, 59, 199, 242, 182, 18, 245, 72, 70, 50, 230, 58, 82, 122, 179, 121, 243, 232, 107, 206, 157, 13, 151, 218, 93, 118, 157, 216, 67, 142, 2, 95, 69, 134, 167, 106, 101, 67, 112, 72, 120, 144, 105, 148, 234, 94, 74, 154, 149, 190, 13, 10, 88, 148, 169, 56, 46, 152, 176, 173, 110, 22, 215, 35, 18, 203, 125, 158, 16, 25, 228, 163, 26, 63, 30, 3, 96, 123, 237, 109, 12, 174, 216, 184, 25, 33, 123, 175, 69, 154, 240, 37, 168, 99, 38, 144, 221, 227, 119, 206, 215, 149, 111, 250, 180, 134, 78, 85, 50, 129, 178, 93, 255, 227, 144, 100, 156, 113, 113, 235, 47, 242, 68, 236, 109, 135, 87, 84, 178, 184, 163, 161, 170, 184, 84, 68, 113, 213, 73, 180, 25, 1, 77, 13, 222, 138, 69, 24, 104, 255, 218, 76, 224, 26, 122, 0, 231, 230, 203, 211, 172, 224, 26, 184, 69, 180, 123, 221, 8, 182, 241, 202, 193, 169, 120, 208, 135, 31, 82, 168, 125, 93, 207, 207, 109, 14, 243, 179, 97, 102, 58, 243, 14, 152, 13, 231, 30, 221, 177, 9, 72, 68, 212, 196, 71, 223, 142, 0, 248, 116, 139, 133, 210, 142, 83, 112, 87, 53, 138, 103, 202, 169, 112, 27, 7, 213, 152, 144, 207, 141, 84, 183, 121, 30, 128, 64, 95, 28, 10, 88, 116, 188, 83, 127, 181, 57, 47, 5, 19, 62, 132, 173, 201, 203, 170, 68, 224, 135, 134, 58, 206, 71, 77, 98, 77, 150, 225, 111, 103, 65, 84, 29, 176, 97, 72, 182, 151, 220, 153, 39, 247, 78, 136, 9, 166, 140, 221, 243, 68, 139, 229, 236, 189, 181, 124, 7, 35, 230, 139, 247, 223, 16, 78, 15, 189, 12, 144, 241, 169, 170, 166, 232, 17, 221, 212, 71, 69, 95, 122, 9, 36, 153, 246, 136, 111, 36, 50, 56, 118, 181, 240, 100, 5, 137, 252, 23, 244, 131, 41, 190, 128, 198, 134, 232, 40, 242, 214, 82, 69, 9, 168, 59, 179, 254, 220, 234, 16, 1, 170, 182, 214, 131, 169, 124, 91, 19, 65, 162, 179, 8, 98, 204, 219, 240, 6, 79, 49, 67, 120, 31, 236, 103, 167, 108, 213, 69, 193, 226, 66, 66, 242, 52, 18, 161, 42, 164, 133, 191, 82, 156, 2, 204, 75, 254, 217, 111, 215, 140, 157, 195, 195, 112, 120, 165, 163, 136, 125, 92, 195, 182, 99, 106, 220])
|
||||
let reader = NALUnitReader()
|
||||
let reader = AVCNALUnitReader()
|
||||
let units = reader.read(data)
|
||||
let sps = units.first(where: { $0.type == .sps })
|
||||
XCTAssertEqual(sps?.data.bytes, [103, 77, 64, 13, 218, 5, 7, 236, 4, 64, 0, 0, 3, 0, 64, 0, 0, 7, 131, 197, 10, 168])
|
||||
|
@ -16,7 +16,7 @@ final class NALUnitReaderTests: XCTestCase {
|
|||
|
||||
func testSlice_startCode3() {
|
||||
let data = Data([0, 0, 1, 65, 226, 8, 13, 224, 179, 253, 15, 80, 87, 254, 170, 10, 255, 213, 65, 95, 250, 168, 43, 255, 85, 5, 127, 234, 160, 175, 253, 84, 21, 255, 170, 130, 10, 197, 255, 170, 134, 250, 37, 66, 31, 232, 170, 28, 59, 199, 255, 170, 135, 42, 122, 250, 11, 143, 255, 85, 5, 127, 234, 160, 175, 253, 84, 43, 208, 134, 33, 111, 244, 37, 66, 221, 88, 190, 147, 21, 200, 236, 47, 210, 127, 166, 196, 119, 250, 168, 43, 255, 85, 5, 127, 234, 160, 175, 253, 84, 21, 255, 170, 130, 191, 245, 80, 87, 254, 170, 10, 255, 213, 65, 95, 250, 168, 43, 248])
|
||||
let reader = NALUnitReader()
|
||||
let reader = AVCNALUnitReader()
|
||||
let units = reader.read(data)
|
||||
XCTAssertEqual([65, 226, 8, 13], units.first?.data.bytes[0..<4])
|
||||
XCTAssertTrue(units.contains(where: { $0.type == .slice }))
|
||||
|
@ -24,7 +24,7 @@ final class NALUnitReaderTests: XCTestCase {
|
|||
|
||||
func testSPSPPS_startCode3() {
|
||||
let data = Data([0, 0, 1, 39, 66, 0, 30, 171, 64, 88, 25, 242, 203, 53, 1, 1, 1, 2, 0, 0, 1, 40, 206, 60, 128, 0, 0, 1, 39, 66, 0, 30, 171, 64, 88, 25, 242, 203, 53, 1, 1, 1, 2, 0, 0, 1, 40, 206, 60, 128, 0, 0, 1, 101, 184, 32, 3, 255, 255, 254, 30, 30, 40, 0, 8, 162, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 175, 255, 227, 240, 65, 192, 1, 16, 101, 17, 204, 73, 101, 165, 194, 60, 154, 126, 49, 8, 164, 150, 125, 247, 223, 125, 247, 223, 125, 247, 223, 125, 247, 223, 127, 255, 138, 252, 16, 120, 0, 55, 178, 27, 153, 226, 14, 166, 169, 75, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 193, 63, 255, 134, 166, 0, 0, 128, 200, 0, 8, 17, 0, 1, 96, 242, 96, 19, 129, 190, 129, 218, 96, 235, 136, 1, 198, 4, 169, 254, 196, 184, 65, 20, 5, 128, 176, 30, 2, 0, 160, 2, 32, 166, 47, 196, 70, 248, 176, 128, 1, 5, 23, 44, 129, 0, 128, 61, 204, 4, 163, 208, 131, 132, 72, 82, 216, 66, 185, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 224, 31, 255, 96, 174, 0, 9, 168, 2, 235, 144, 14, 120, 97, 73, 182, 124, 161, 0, 0, 32, 32, 0, 2, 12, 64, 0, 32, 65, 65, 134, 48, 150, 0, 2, 1, 128, 6, 2, 0, 19, 128, 18, 51, 13, 97, 202, 112, 8, 110, 242, 1, 128, 6, 185, 128, 130, 164, 24, 117, 238, 64, 27, 154, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 233, 235, 174, 186, 235, 175, 255, 255, 130, 239, 0, 7, 24, 27, 56, 90, 108, 195, 52, 5, 156, 12, 212, 90, 62, 1, 23, 128, 8, 35, 201, 76, 218, 71, 9, 31, 159, 253, 221, 199, 65, 220, 0, 24, 152, 156, 8, 30, 102, 87, 136, 225, 17, 170, 242, 109, 0, 88, 97, 19, 133, 35, 14, 179, 217, 217, 188, 212, 50, 138, 112, 86, 161, 151, 215, 56, 73, 126, 108, 130, 28, 45, 172, 222, 5, 7, 27, 252, 215, 255, 121, 11, 86, 3, 2, 86, 156, 239, 209, 189, 183, 117, 226, 29, 21, 192, 236, 87, 16, 153, 48, 100, 226, 90, 243, 160, 0, 100, 129, 102, 20, 1, 17, 64, 38, 251, 224, 128, 1, 0, 25, 192, 240, 160, 62, 54, 11, 90, 25, 108, 164, 6, 82, 223, 19, 200, 0, 4, 0, 136, 131, 97, 133, 147, 194, 128, 35, 135, 110, 31, 255, 234, 131, 191, 85, 162, 0, 1, 0, 61, 111, 224, 82, 52, 69, 101, 187, 238, 215, 255, 131, 0, 79, 136, 142, 24, 190, 138, 230, 192, 9, 218, 71, 116])
|
||||
let reader = NALUnitReader()
|
||||
let reader = AVCNALUnitReader()
|
||||
XCTAssertNotNil(reader.makeFormatDescription(data))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
import Foundation
|
||||
import XCTest
|
||||
|
||||
@testable import HaishinKit
|
||||
|
||||
final class RTMPReaderTests: XCTestCase {
|
||||
func testReader() {
|
||||
let bundle = Bundle(for: type(of: self))
|
||||
let url = URL(fileURLWithPath: bundle.path(forResource: "SampleVideo_360x240_5mb", ofType: "flv")!)
|
||||
let reader = FLVReader(url: url)
|
||||
while true {
|
||||
guard let _ = reader.next() else {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,127 @@
|
|||
import Foundation
|
||||
import XCTest
|
||||
import CoreMedia
|
||||
|
||||
@testable import HaishinKit
|
||||
|
||||
final class CMAudioSampleBufferUtilTests: XCTestCase {
|
||||
func test48000_2chTest() {
|
||||
let streamBasicDescription = AudioStreamBasicDescription(
|
||||
mSampleRate: 48000.0,
|
||||
mFormatID: kAudioFormatLinearPCM,
|
||||
mFormatFlags: 0xc,
|
||||
mBytesPerPacket: 4,
|
||||
mFramesPerPacket: 1,
|
||||
mBytesPerFrame: 4,
|
||||
mChannelsPerFrame: 2,
|
||||
mBitsPerChannel: 16,
|
||||
mReserved: 0
|
||||
)
|
||||
if let buffer = makeSampleBuffer(streamBasicDescription) {
|
||||
XCTAssertNotNil(CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: 1024, presentationTimeStamp: .zero))
|
||||
} else {
|
||||
XCTFail()
|
||||
}
|
||||
}
|
||||
|
||||
func test48000_4chTest() {
|
||||
let streamBasicDescription = AudioStreamBasicDescription(
|
||||
mSampleRate: 48000.0,
|
||||
mFormatID: kAudioFormatLinearPCM,
|
||||
mFormatFlags: 0xc,
|
||||
mBytesPerPacket: 8,
|
||||
mFramesPerPacket: 1,
|
||||
mBytesPerFrame: 8,
|
||||
mChannelsPerFrame: 4,
|
||||
mBitsPerChannel: 16,
|
||||
mReserved: 0
|
||||
)
|
||||
if let buffer = makeSampleBuffer(streamBasicDescription) {
|
||||
XCTAssertNotNil(CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: 1024, presentationTimeStamp: .zero))
|
||||
} else {
|
||||
XCTFail()
|
||||
}
|
||||
}
|
||||
|
||||
func test48000_3chTest() {
|
||||
let streamBasicDescription = AudioStreamBasicDescription(
|
||||
mSampleRate: 48000.0,
|
||||
mFormatID: kAudioFormatLinearPCM,
|
||||
mFormatFlags: 0xc,
|
||||
mBytesPerPacket: 6,
|
||||
mFramesPerPacket: 1,
|
||||
mBytesPerFrame: 6,
|
||||
mChannelsPerFrame: 3,
|
||||
mBitsPerChannel: 16,
|
||||
mReserved: 0
|
||||
)
|
||||
if let buffer = makeSampleBuffer(streamBasicDescription) {
|
||||
XCTAssertNotNil(CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: 1024, presentationTimeStamp: .zero))
|
||||
} else {
|
||||
XCTFail()
|
||||
}
|
||||
}
|
||||
|
||||
func test48000_2chTest_mac() {
|
||||
let streamBasicDescription = AudioStreamBasicDescription(
|
||||
mSampleRate: 48000.0,
|
||||
mFormatID: kAudioFormatLinearPCM,
|
||||
mFormatFlags: 0x29,
|
||||
mBytesPerPacket: 4,
|
||||
mFramesPerPacket: 1,
|
||||
mBytesPerFrame: 4,
|
||||
mChannelsPerFrame: 1,
|
||||
mBitsPerChannel: 32,
|
||||
mReserved: 0
|
||||
)
|
||||
if let buffer = makeSampleBuffer(streamBasicDescription) {
|
||||
XCTAssertNotNil(CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: 1024, presentationTimeStamp: .zero))
|
||||
} else {
|
||||
XCTFail()
|
||||
}
|
||||
}
|
||||
|
||||
private func makeSampleBuffer(_ streamBasicDescription: AudioStreamBasicDescription) -> CMSampleBuffer? {
|
||||
guard let formatDescription = try? CMAudioFormatDescription(audioStreamBasicDescription: streamBasicDescription) else {
|
||||
return nil
|
||||
}
|
||||
var status: OSStatus = noErr
|
||||
var blockBuffer: CMBlockBuffer?
|
||||
let blockSize = 1024 * Int(streamBasicDescription.mBytesPerPacket)
|
||||
status = CMBlockBufferCreateWithMemoryBlock(
|
||||
allocator: nil,
|
||||
memoryBlock: nil,
|
||||
blockLength: blockSize,
|
||||
blockAllocator: nil,
|
||||
customBlockSource: nil,
|
||||
offsetToData: 0,
|
||||
dataLength: blockSize,
|
||||
flags: 0,
|
||||
blockBufferOut: &blockBuffer
|
||||
)
|
||||
guard let blockBuffer, status == noErr else {
|
||||
return nil
|
||||
}
|
||||
status = CMBlockBufferFillDataBytes(with: 0, blockBuffer: blockBuffer, offsetIntoDestination: 0, dataLength: blockSize)
|
||||
guard status == noErr else {
|
||||
return nil
|
||||
}
|
||||
var sampleBuffer: CMSampleBuffer?
|
||||
status = CMAudioSampleBufferCreateWithPacketDescriptions(
|
||||
allocator: nil,
|
||||
dataBuffer: blockBuffer,
|
||||
dataReady: true,
|
||||
makeDataReadyCallback: nil,
|
||||
refcon: nil,
|
||||
formatDescription: formatDescription,
|
||||
sampleCount: 1024,
|
||||
presentationTimeStamp: CMTimeMake(value: 1024, timescale: Int32(streamBasicDescription.mSampleRate)),
|
||||
packetDescriptions: nil,
|
||||
sampleBufferOut: &sampleBuffer
|
||||
)
|
||||
guard let sampleBuffer, status == noErr else {
|
||||
return nil
|
||||
}
|
||||
return sampleBuffer
|
||||
}
|
||||
}
|
|
@ -1,82 +0,0 @@
|
|||
import Foundation
|
||||
import XCTest
|
||||
|
||||
@testable import HaishinKit
|
||||
|
||||
final class RingBufferTests: XCTestCase {
|
||||
func testExtensibleCircularBuffer() {
|
||||
var buffer = RingBuffer<String>(4, extensible: false)
|
||||
_ = buffer.append("a")
|
||||
_ = buffer.append("b")
|
||||
_ = buffer.append("c")
|
||||
_ = buffer.append("d")
|
||||
XCTAssertEqual(buffer.count, 4)
|
||||
XCTAssertEqual(buffer.isFull, true)
|
||||
print(buffer)
|
||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
||||
XCTAssertEqual(buffer.removeFirst(), "c")
|
||||
XCTAssertEqual(buffer.removeFirst(), "d")
|
||||
_ = buffer.append("a")
|
||||
_ = buffer.append("b")
|
||||
_ = buffer.append("c")
|
||||
_ = buffer.append("d")
|
||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
||||
XCTAssertEqual(buffer.removeFirst(), "c")
|
||||
XCTAssertEqual(buffer.removeFirst(), "d")
|
||||
print(buffer)
|
||||
}
|
||||
|
||||
func testNonExtensibleCircularBuffer() {
|
||||
var buffer = RingBuffer<String>(4, extensible: true)
|
||||
_ = buffer.append("a")
|
||||
_ = buffer.append("b")
|
||||
_ = buffer.append("c")
|
||||
_ = buffer.append("d")
|
||||
XCTAssertEqual(buffer.count, 4)
|
||||
XCTAssertEqual(buffer.isFull, true)
|
||||
print(buffer)
|
||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
||||
XCTAssertEqual(buffer.removeFirst(), "c")
|
||||
XCTAssertEqual(buffer.removeFirst(), "d")
|
||||
XCTAssertEqual(buffer.count, 0)
|
||||
XCTAssertEqual(buffer.isEmpty, true)
|
||||
_ = buffer.append("a")
|
||||
_ = buffer.append("b")
|
||||
_ = buffer.append("c")
|
||||
_ = buffer.append("d")
|
||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
||||
XCTAssertEqual(buffer.removeFirst(), "c")
|
||||
XCTAssertEqual(buffer.removeFirst(), "d")
|
||||
print(buffer)
|
||||
}
|
||||
|
||||
func testExtensibleCircularBuffer2() {
|
||||
var buffer = RingBuffer<String>(4, extensible: true)
|
||||
_ = buffer.append("a")
|
||||
_ = buffer.append("b")
|
||||
_ = buffer.append("c")
|
||||
_ = buffer.append("d")
|
||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
||||
XCTAssertEqual(buffer.count, 2)
|
||||
XCTAssertEqual(buffer.isFull, false)
|
||||
_ = buffer.append("e")
|
||||
_ = buffer.append("f")
|
||||
XCTAssertEqual(buffer.count, 4)
|
||||
XCTAssertEqual(buffer.isFull, true)
|
||||
_ = buffer.append("g")
|
||||
_ = buffer.append("h")
|
||||
XCTAssertEqual(buffer.count, 6)
|
||||
XCTAssertEqual("c", buffer.removeFirst())
|
||||
XCTAssertEqual("d", buffer.removeFirst())
|
||||
XCTAssertEqual("e", buffer.removeFirst())
|
||||
XCTAssertEqual("f", buffer.removeFirst())
|
||||
XCTAssertEqual("g", buffer.removeFirst())
|
||||
XCTAssertEqual("h", buffer.removeFirst())
|
||||
XCTAssertEqual(buffer.count, 0)
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit7ASArrayV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/!=(_:_:)"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit7ASArrayV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV","text":"ASArray"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV","text":"ASArray"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit7ASArrayV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV","text":"ASArray"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV","text":"ASArray"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit7ASArrayV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/equatable-implementations"}}}
|
|
@ -1 +1 @@
|
|||
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/customdebugstringconvertible-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"CustomDebugStringConvertible Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/debugdescription"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/customdebugstringconvertible-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"CustomDebugStringConvertible Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/debugdescription"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/debugdescription"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomDebugStringConvertible.debugDescription"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"debugDescription","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"symbolKind":"property","externalID":"s:10HaishinKit7ASArrayV16debugDescriptionSSvp","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/CustomDebugStringConvertible-Implementations":{"role":"collectionGroup","title":"CustomDebugStringConvertible Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/customdebugstringconvertible-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/debugdescription"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/debugdescription"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomDebugStringConvertible.debugDescription"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"debugDescription","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"symbolKind":"property","externalID":"s:10HaishinKit7ASArrayV16debugDescriptionSSvp","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/CustomDebugStringConvertible-Implementations":{"role":"collectionGroup","title":"CustomDebugStringConvertible Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/customdebugstringconvertible-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/debugdescription"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
|||
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/==(_:_:)"}}}
|
||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/==(_:_:)"}}}
|
|
@ -1 +1 @@
|
|||
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/expressiblebyarrayliteral-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"ExpressibleByArrayLiteral Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/init(arrayLiteral:)":{"role":"symbol","title":"init(arrayLiteral:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/expressiblebyarrayliteral-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"ExpressibleByArrayLiteral Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(arrayLiteral:)":{"role":"symbol","title":"init(arrayLiteral:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":" "},{"kind":"internalParam","text":"elements"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"ExpressibleByArrayLiteral.init(arrayLiteral:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"init(arrayLiteral:)","roleHeading":"Initializer","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV12arrayLiteralACypSgd_tcfc","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(arrayLiteral:)":{"role":"symbol","title":"init(arrayLiteral:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/ExpressibleByArrayLiteral-Implementations":{"role":"collectionGroup","title":"ExpressibleByArrayLiteral Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/expressiblebyarrayliteral-implementations"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":" "},{"kind":"internalParam","text":"elements"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"ExpressibleByArrayLiteral.init(arrayLiteral:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"init(arrayLiteral:)","roleHeading":"Initializer","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV12arrayLiteralACypSgd_tcfc","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(arrayLiteral:)":{"role":"symbol","title":"init(arrayLiteral:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray/ExpressibleByArrayLiteral-Implementations":{"role":"collectionGroup","title":"ExpressibleByArrayLiteral Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/expressiblebyarrayliteral-implementations"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(count:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(count:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance containing the specified number of a single."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"title":"init(count:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV5countACSi_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(count:)":{"role":"symbol","title":"init(count:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance containing the specified number of a single."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(count:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(count:)"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(count:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(count:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance containing the specified number of a single."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"title":"init(count:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV5countACSi_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(count:)":{"role":"symbol","title":"init(count:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance containing the specified number of a single."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(count:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(count:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of data."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV4dataACSayypSgG_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"abstract":[{"type":"text","text":"Creates a new instance of data."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of data."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV4dataACSayypSgG_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"abstract":[{"type":"text","text":"Creates a new instance of data."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/length"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/length","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The length of an array."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"title":"length","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit7ASArrayV6lengthSivp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/length":{"role":"symbol","title":"length","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"abstract":[{"type":"text","text":"The length of an array."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/length","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/length"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/length"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/length","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The length of an array."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"title":"length","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit7ASArrayV6lengthSivp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/length":{"role":"symbol","title":"length","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"abstract":[{"type":"text","text":"The length of an array."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/length","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/length"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"internalParam","text":"i"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/subscript(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/subscript(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Accesses the element at the specified position."}],"kind":"symbol","metadata":{"role":"symbol","title":"subscript(_:)","roleHeading":"Instance Subscript","fragments":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?"}],"symbolKind":"subscript","externalID":"s:10HaishinKit7ASArrayVyypSgypcip","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/subscript(_:)":{"role":"symbol","title":"subscript(_:)","fragments":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?"}],"abstract":[{"type":"text","text":"Accesses the element at the specified position."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/subscript(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/subscript(_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"internalParam","text":"i"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/subscript(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/subscript(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Accesses the element at the specified position."}],"kind":"symbol","metadata":{"role":"symbol","title":"subscript(_:)","roleHeading":"Instance Subscript","fragments":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?"}],"symbolKind":"subscript","externalID":"s:10HaishinKit7ASArrayVyypSgypcip","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/subscript(_:)":{"role":"symbol","title":"subscript(_:)","fragments":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?"}],"abstract":[{"type":"text","text":"Accesses the element at the specified position."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/subscript(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/subscript(_:)"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"},{"kind":"text","text":" = ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?]"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asobject"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"title":"ASObject","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:10HaishinKit8ASObjecta","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASObject"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASObject":{"role":"symbol","title":"ASObject","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASObject"}],"url":"\/documentation\/haishinkit\/asobject"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"},{"kind":"text","text":" = ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?]"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asobject"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"title":"ASObject","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:10HaishinKit8ASObjecta","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASObject"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASObject":{"role":"symbol","title":"ASObject","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASObject"}],"url":"\/documentation\/haishinkit\/asobject"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":" "},{"kind":"internalParam","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"where"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":" : "},{"kind":"typeIdentifier","text":"Decodable","preciseIdentifier":"s:Se"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/register(type:named:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/register(type:named:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"register(type:named:)","roleHeading":"Type Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit13ASTypedObjectV8register4type5namedyxm_SStSeRzlFZ","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/register(type:named:)":{"role":"symbol","title":"register(type:named:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/register(type:named:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/astypedobject\/register(type:named:)"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":" "},{"kind":"internalParam","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"where"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":" : "},{"kind":"typeIdentifier","text":"Decodable","preciseIdentifier":"s:Se"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/register(type:named:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/register(type:named:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"register(type:named:)","roleHeading":"Type Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit13ASTypedObjectV8register4type5namedyxm_SStSeRzlFZ","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/register(type:named:)":{"role":"symbol","title":"register(type:named:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/register(type:named:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/astypedobject\/register(type:named:)"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"},{"kind":"text","text":" = ("},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","preciseIdentifier":"s:10HaishinKit8ASObjecta","text":"ASObject"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"keyword","text":"Any"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/typedobjectdecoder"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/TypedObjectDecoder","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"}],"title":"ASTypedObject.TypedObjectDecoder","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:10HaishinKit13ASTypedObjectV05TypedD7Decodera","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"TypedObjectDecoder"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASObject":{"role":"symbol","title":"ASObject","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASObject"}],"url":"\/documentation\/haishinkit\/asobject"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/TypedObjectDecoder":{"role":"symbol","title":"ASTypedObject.TypedObjectDecoder","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/TypedObjectDecoder","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"TypedObjectDecoder"}],"url":"\/documentation\/haishinkit\/astypedobject\/typedobjectdecoder"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"},{"kind":"text","text":" = ("},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","preciseIdentifier":"s:10HaishinKit8ASObjecta","text":"ASObject"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"keyword","text":"Any"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/typedobjectdecoder"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/TypedObjectDecoder","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"}],"title":"ASTypedObject.TypedObjectDecoder","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:10HaishinKit13ASTypedObjectV05TypedD7Decodera","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"TypedObjectDecoder"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit/ASObject":{"role":"symbol","title":"ASObject","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASObject"}],"url":"\/documentation\/haishinkit\/asobject"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/TypedObjectDecoder":{"role":"symbol","title":"ASTypedObject.TypedObjectDecoder","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/TypedObjectDecoder","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"TypedObjectDecoder"}],"url":"\/documentation\/haishinkit\/astypedobject\/typedobjectdecoder"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":" "},{"kind":"internalParam","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/unregister(typenamed:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/unregister(typeNamed:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"unregister(typeNamed:)","roleHeading":"Type Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit13ASTypedObjectV10unregister9typeNamedySS_tFZ","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/unregister(typeNamed:)":{"role":"symbol","title":"unregister(typeNamed:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/unregister(typeNamed:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/astypedobject\/unregister(typenamed:)"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":" "},{"kind":"internalParam","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/unregister(typenamed:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/unregister(typeNamed:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"unregister(typeNamed:)","roleHeading":"Type Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit13ASTypedObjectV10unregister9typeNamedySS_tFZ","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/unregister(typeNamed:)":{"role":"symbol","title":"unregister(typeNamed:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/unregister(typeNamed:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/astypedobject\/unregister(typenamed:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asundefined"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"title":"ASUndefined","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit11ASUndefinedV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description"]}],"references":{"doc://HaishinKit/documentation/HaishinKit/ASUndefined/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asundefined\/description"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined":{"role":"symbol","title":"ASUndefined","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}],"url":"\/documentation\/haishinkit\/asundefined"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asundefined"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"title":"ASUndefined","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit11ASUndefinedV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description"]}],"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined":{"role":"symbol","title":"ASUndefined","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}],"url":"\/documentation\/haishinkit\/asundefined"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asundefined\/description"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asundefined\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit11ASUndefinedV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASUndefined":{"role":"symbol","title":"ASUndefined","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}],"url":"\/documentation\/haishinkit\/asundefined"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asundefined\/description"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asundefined\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit11ASUndefinedV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asundefined\/description"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined":{"role":"symbol","title":"ASUndefined","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}],"url":"\/documentation\/haishinkit\/asundefined"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP","doc:\/\/HaishinKit\/SQ"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"title":"ASXML","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit5ASXMLV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASXML"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description"]},{"title":"Default Implementations","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"],"generated":true}],"references":{"doc://HaishinKit/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/HaishinKit\/SQ"},"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/documentation/HaishinKit/ASXML/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/description"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP","doc:\/\/HaishinKit\/SQ"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"title":"ASXML","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit5ASXMLV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASXML"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description"]},{"title":"Default Implementations","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"],"generated":true}],"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/HaishinKit\/SQ"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXML/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/description"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit5ASXMLV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXML/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit5ASXMLV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV","text":"ASXML"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV","text":"ASXML"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit5ASXMLV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXML/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV","text":"ASXML"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV","text":"ASXML"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit5ASXMLV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit5ASXMLV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/description"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit5ASXMLV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/description"}}}
|
|
@ -1 +1 @@
|
|||
{"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/!=(_:_:)"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of string."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit5ASXMLV4dataACSS_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of string."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit5ASXMLV4dataACSS_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP","doc:\/\/HaishinKit\/SQ"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description"]},{"title":"Default Implementations","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"],"generated":true}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"title":"ASXMLDocument","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit13ASXMLDocumentV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"references":{"doc://HaishinKit/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/HaishinKit\/SQ"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/description"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/init(data:)"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP","doc:\/\/HaishinKit\/SQ"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description"]},{"title":"Default Implementations","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"],"generated":true}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"title":"ASXMLDocument","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit13ASXMLDocumentV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/init(data:)"},"doc://HaishinKit/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/HaishinKit\/SQ"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/description"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit13ASXMLDocumentV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit13ASXMLDocumentV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV","text":"ASXMLDocument"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV","text":"ASXMLDocument"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit13ASXMLDocumentV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV","text":"ASXMLDocument"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV","text":"ASXMLDocument"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit13ASXMLDocumentV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit13ASXMLDocumentV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/description"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit13ASXMLDocumentV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/description"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"}}}
|
|
@ -1 +1 @@
|
|||
{"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"}}}
|
||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of string."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit13ASXMLDocumentV4dataACSS_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of string."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit13ASXMLDocumentV4dataACSS_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"A"},{"kind":"text","text":">"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"title":"Atomic","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit6AtomicV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"Atomic"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value"]},{"title":"Instance Methods","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)"]}],"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"},"doc://HaishinKit/documentation/HaishinKit/Atomic/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates an instance of value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/init(_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"abstract":[{"type":"text","text":"Getter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/value"},"doc://HaishinKit/documentation/HaishinKit/Atomic/mutate(_:)":{"role":"symbol","title":"mutate(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Setter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/mutate(_:)"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"A"},{"kind":"text","text":">"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"title":"Atomic","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit6AtomicV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"Atomic"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value"]},{"title":"Instance Methods","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)"]}],"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic/mutate(_:)":{"role":"symbol","title":"mutate(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Setter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/mutate(_:)"},"doc://HaishinKit/documentation/HaishinKit/Atomic/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"abstract":[{"type":"text","text":"Getter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/value"},"doc://HaishinKit/documentation/HaishinKit/Atomic/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates an instance of value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/init(_:)"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/init(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates an instance of value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"title":"init(_:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit6AtomicVyACyxGxcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates an instance of value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/init(_:)"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/init(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates an instance of value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"title":"init(_:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit6AtomicVyACyxGxcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates an instance of value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/init(_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"mutating"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"transform"},{"kind":"text","text":": ("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/mutate(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Setter for the value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"title":"mutate(_:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit6AtomicV6mutateyyyxzXEF","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/mutate(_:)":{"role":"symbol","title":"mutate(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Setter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/mutate(_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"mutating"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"transform"},{"kind":"text","text":": ("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/mutate(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Setter for the value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"title":"mutate(_:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit6AtomicV6mutateyyyxzXEF","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/mutate(_:)":{"role":"symbol","title":"mutate(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Setter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/mutate(_:)"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
|||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/value"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Getter for the value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"title":"value","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit6AtomicV5valuexvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"abstract":[{"type":"text","text":"Getter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/value"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"}}}
|
||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/value"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Getter for the value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"title":"value","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit6AtomicV5valuexvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"},"doc://HaishinKit/documentation/HaishinKit/Atomic/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"abstract":[{"type":"text","text":"Getter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/value"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue