{"id":4559,"date":"2026-02-20T10:24:46","date_gmt":"2026-02-20T01:24:46","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=4559"},"modified":"2026-02-20T12:02:32","modified_gmt":"2026-02-20T03:02:32","slug":"swift-active-inactive-button","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/02\/20\/swift-active-inactive-button\/","title":{"rendered":"[Swift]Active,inActive button[MacOS]"},"content":{"rendered":"\n<p>\u2b50\ufe0f ReactExample6 &#8211; server + swift<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \uc774\uc804\uc5d0 \ud3ec\uc2a4\ud2b8\ud55c React \ubd80\ubd84\uc758 Active,inActiove\ubc84\ud2bc\uc744 Swift\uc571\uc73c\ub85c \uad6c\ud604\ud55c \ub0b4\uc6a9\uc785\ub2c8\ub2e4.<br>This is the implementation of the Active, inActive buttons from the React section I posted previously into a Swift app.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \uc11c\ubc84 \ubd80\ubd84\uc758 \ucf54\ub4dc\ub294 Vite+React\uc758 Express\uc11c\ubc84 \ubd80\ubd84\uacfc \uac19\uc2b5\ub2c8\ub2e4.<br>The code for the server part is the same as the Express server part of Vite+React.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-freelifemakers-org wp-block-embed-freelifemakers-org\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"ZbGgH0OYct\"><a href=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/02\/17\/vitereactexpress-react-active\/\">[Vite+React]Active,inActive button[MacOS]<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;[Vite+React]Active,inActive button[MacOS]&#8221; &#8212; freelifemakers.org\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/02\/17\/vitereactexpress-react-active\/embed\/#?secret=ZEUe1C12so#?secret=ZbGgH0OYct\" data-secret=\"ZbGgH0OYct\" width=\"560\" height=\"315\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb Nodejs Express Server<\/p>\n\n\n\n<p>\u2714\ufe0fserver.js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const express = require(\"express\");\nconst { Pool } = require(\"pg\");\nconst cors = require(\"cors\");\n\nconst app = express();\napp.use(cors());\napp.use(express.json());\n\nconst pool = new Pool({\n  user: \"yourID\", \/\/ \ubcf8\uc778\uc758 \uacc4\uc815\uba85 \/ your account name\n  host: \"localhost\",\n  database: \"postgres\", \/\/ \ubcf8\uc778\uc758 DB\uba85 \/ Your DB name\n  password: \"\", \/\/ \ubcf8\uc778\uc758 \ube44\ubc00\ubc88\ud638 \/ your password\n  port: 5432,\n});\n\n\/\/ \ud604\uc7ac \uc0c1\ud0dc \uac00\uc838\uc624\uae30\n\/\/ Get current state\napp.get(\"\/status\", async (req, res) => {\n  try {\n    const result = await pool.query(\n      \"SELECT is_active FROM button_status WHERE id = 1\",\n    );\n    res.json(result.rows&#91;0]);\n  } catch (err) {\n    res.status(500).send(err.message);\n  }\n});\n\n\/\/ \uc0c1\ud0dc \uc5c5\ub370\uc774\ud2b8\ud558\uae30\n\/\/ update status\napp.post(\"\/toggle\", async (req, res) => {\n  const { isActive } = req.body;\n  try {\n    const result = await pool.query(\n      \"UPDATE button_status SET is_active = $1 WHERE id = 1 RETURNING *\",\n      &#91;isActive],\n    );\n    res.json(result.rows&#91;0]);\n  } catch (err) {\n    res.status(500).send(err.message);\n  }\n});\n\napp.listen(3000, () => console.log(\"Server running on http:\/\/localhost:3000\"));\n<\/code><\/pre>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb swift<\/p>\n\n\n\n<p>\u2714\ufe0fContentView<\/p>\n\n\n\n<p>1) @MainActor : <\/p>\n\n\n\n<p>&#8211;UI \ubcc0\uacbd\uc740 \ubc18\ub4dc\uc2dc \uba54\uc778 \uc2a4\ub808\ub4dc\uc5d0\uc11c \ud574\uc57c\ud569\ub2c8\ub2e4.<br>UI changes must be made on the main thread.<\/p>\n\n\n\n<p>&#8211;@MainActor\uac00 \uc788\uc73c\uba74 \uc774 \ud568\uc218\ub294 \ubc18\ub4dc\uc2dc \uba54\uc778 \uc2a4\ub808\ub4dc\uc5d0\uc11c \uc2e4\ud589\ub418\uc5b4\uc57c \ud55c\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4.<br>The presence of @MainActor means that this function must be executed on the main thread.<\/p>\n\n\n\n<p>2)Thread<\/p>\n\n\n\n<p>&#8211;\uc4f0\ub808\ub4dc\ub294 \ud558\ub098\uc758 \ud504\ub85c\uadf8\ub7a8 \uc548\uc5d0\uc11c \uc5ec\ub7ec \uc791\uc5c5\uc744 \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ud558\uae30 \uc704\ud55c \uc2e4\ud589 \ud750\ub984\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<br>A thread is a flow of execution for executing multiple tasks simultaneously within a single program.<\/p>\n\n\n\n<p>&#8211;\uc989 \uc2e4\ud589 \ud750\ub984\uc744 \ubd84\ub9ac\ud574\uc11c \ub3d9\uc2dc\uc5d0 \uc9c4\ud589\ud560 \uc218 \uc788\uac8c \ub9cc\ub4dc\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<br>That means separating the execution flow so that it can proceed concurrently.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import SwiftUI\n\nstruct ContentView: View {\n    \n    @State private var isActive: Bool = false\n    private let baseURL = \"http:\/\/192.168.0.100:3000\" \/\/ your ip address\n    \n    var body: some View {\n        VStack(spacing: 20) {\n            \n            Text(\"\ud604\uc7ac \uc0c1\ud0dc \/ Current Status\")\n                .font(.headline)\n            \n            Text(isActive ? \"\ud83d\udd35 \ud65c\uc131 \/ Active\" : \"\ud83d\udd34 \ube44\ud65c\uc131 \/ Inactive\")\n                .font(.title)\n            \n            Button {\n                Task {\n                    await toggleStatus()\n                }\n            } label: {\n                Text(isActive ? \"\ube44\ud65c\uc131\ud654\ud558\uae30 \/ InActivate\"\n                              : \"\ud65c\uc131\ud654\ud558\uae30 \/ Activate\")\n                    .padding()\n                    .frame(width: 220)\n                    .background(isActive ? Color.green : Color.red)\n                    .foregroundColor(.white)\n                    .cornerRadius(10)\n            }\n        }\n        .frame(maxWidth: .infinity, maxHeight: .infinity)\n        .task {   \/\/ \ube44\ub3d9\uae30 \uc2dc\uc791 \/ asynchronous start\n            await fetchStatus()\n        }\n    }\n}\n\n\/\/\n\/\/ MARK: - Networking\n\/\/\n\n\/\/ extension : \uae30\uc874 \ud0c0\uc785\uc5d0 \uae30\ub2a5\uc744 \ucd94\uac00\ud558\uac70\ub098,\ucf54\ub4dc\ub97c \uc5ed\ud560\ubcc4\ub85c \ub098\ub204\uae30 \uc704\ud574 \uc0ac\uc6a9\ud558\ub294 \ubb38\ubc95( \ucf54\ub4dc \uac00\ub3c5\uc131\uc744 \uc704\ud574\uc11c \uc0ac\uc6a9\ud568.)\n\/\/ Extension: A grammar used to add functionality to existing types or to divide code by role (used for code readability)\n\nextension ContentView {\n    \n    \/\/ GET \uc694\uccad(\uc870\ud68c) \/ GET Request(Search)\n    @MainActor\n    func fetchStatus() async {\n        guard let url = URL(string: \"\\(baseURL)\/status\") else { return }\n        \n        do {\n            let (data, _) = try await URLSession.shared.data(from: url)\n            let decoded = try JSONDecoder().decode(StatusResponse.self, from: data)\n            isActive = decoded.is_active\n        } catch {\n            print(\"\uc0c1\ud0dc \uac00\uc838\uc624\uae30 \uc2e4\ud328\/Failed to get status:\", error)\n        }\n    }\n    \n    \/\/ POST \uc694\uccad(\uc0c1\ud0dc\ubcc0\uacbd) \/ POST Request(Status change)\n    @MainActor\n    func toggleStatus() async {\n        guard let url = URL(string: \"\\(baseURL)\/toggle\") else { return }\n        \n        var request = URLRequest(url: url)\n        request.httpMethod = \"POST\"\n        request.setValue(\"application\/json\", forHTTPHeaderField: \"Content-Type\")\n        \n        let body = &#91;\"isActive\": !isActive]\n        request.httpBody = try? JSONSerialization.data(withJSONObject: body)\n        \n        do {\n            let (data, _) = try await URLSession.shared.data(for: request)\n            let decoded = try JSONDecoder().decode(StatusResponse.self, from: data)\n            isActive = decoded.is_active\n        } catch {\n            print(\"\ud1a0\uae00 \uc2e4\ud328\/Toggle failed:\", error)\n        }\n    }\n}\n\n\/\/ \uc11c\ubc84 \uc751\ub2f5 \ubaa8\ub378 \/ Server response model\nstruct StatusResponse: Codable {\n    let is_active: Bool\n}\n\n#Preview {\n    ContentView()\n}<\/code><\/pre>\n\n\n\n<p>\u2b50\ufe0f \ub9cc\uc57d \uc2e4\uc81c\ub85c swift\uc571\uc744 \ube4c\ub4dc\ud558\ub294 \uacbd\uc6b0 \uc11c\ubc84\ub294 https\ud658\uacbd\uc73c\ub85c \ubc14\uafd4\uc918\uc57c\ud569\ub2c8\ub2e4.<br>If you are actually building a Swift app, you will need to change the server to https.<\/p>\n\n\n\n<p>http\ud658\uacbd\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub824\uba74 xcode\uc5d0\uc11c \ubcc4\ub3c4\uc758 \uc124\uc815\uc744 \ud574\uc918\uc57c\ud569\ub2c8\ub2e4.(\uc544\ub798\uc758 \uc774\ubbf8\uc9c0\ub97c \ucc38\uc870\ud558\uc138\uc694)<br>To use it in an http environment, you need to make separate settings in Xcode. (See the image below)<\/p>\n\n\n\n<p><br>\u2714\ufe0f Xcode -> \ud504\ub85c\uc81d\ud2b8\uc120\ud0dd->TARGETS\uc120\ud0dd -> info \uc120\ud0dd<br>Xcode ->Select project -> Select TARGETS -> Select info<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"514\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-0-1024x514.png\" alt=\"\" class=\"wp-image-4590\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-0-1024x514.png 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-0-300x151.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-0-768x386.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-0-1536x772.png 1536w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-0-400x201.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-0-800x402.png 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-0.png 1700w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u2714\ufe0f \ub9c8\uc6b0\uc2a4 \uc6b0\ud074\ub9ad -> Add Row \uc120\ud0dd<br>Right click -> Select Add Row<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"723\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-1-1024x723.png\" alt=\"\" class=\"wp-image-4589\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-1-1024x723.png 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-1-300x212.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-1-768x542.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-1-1536x1084.png 1536w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-1-400x282.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-1-800x565.png 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-1.png 1700w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u2714\ufe0f App Transport Security Settings \uc120\ud0dd<br>Select App Transport Security Settings<\/p>\n\n\n\n<p>\u2714\ufe0f \uc88c\uce21 \ud654\uc0b4\ud45c \uc544\ub798\ub85c \ud655\uc7a5<br>Expand left arrow down<\/p>\n\n\n\n<p>\u2714\ufe0f \ub9c8\uc6b0\uc2a4 \uc6b0\ud074\ub9ad\ud574\uc11c Add Row\uc120\ud0dd<br>Right-click and select Add Row<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"658\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-2-1024x658.png\" alt=\"\" class=\"wp-image-4591\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-2-1024x658.png 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-2-300x193.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-2-768x493.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-2-1536x987.png 1536w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-2-2048x1316.png 2048w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-2-1870x1201.png 1870w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-2-400x257.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-2-800x514.png 800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u2714\ufe0f Allow Arbitray Loads \uc785\ub825<br>Enter Allow Arbitray Loads<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"581\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-3-1024x581.png\" alt=\"\" class=\"wp-image-4592\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-3-1024x581.png 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-3-300x170.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-3-768x436.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-3-1536x871.png 1536w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-3-1870x1061.png 1870w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-3-400x227.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-3-800x454.png 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/xcode-3.png 2034w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \uc2a4\ud06c\ub9b0\uc0f7\/ScreenShot<\/p>\n\n\n\n<p>\u2714\ufe0f Xcode Simulator<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"1024\" data-id=\"4609\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-true-480x1024.png\" alt=\"\" class=\"wp-image-4609\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-true-480x1024.png 480w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-true-141x300.png 141w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-true-400x852.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-true.png 488w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><figcaption class=\"wp-element-caption\">Active<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"492\" height=\"1024\" data-id=\"4608\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-false-492x1024.png\" alt=\"\" class=\"wp-image-4608\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-false-492x1024.png 492w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-false-144x300.png 144w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-false-400x832.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/swift-false.png 500w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><figcaption class=\"wp-element-caption\">InActive<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p>\u2714\ufe0f Postgresql<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"806\" height=\"406\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/postgres-swift.png\" alt=\"\" class=\"wp-image-4610\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/postgres-swift.png 806w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/postgres-swift-300x151.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/postgres-swift-768x387.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/postgres-swift-400x201.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/postgres-swift-800x403.png 800w\" sizes=\"auto, (max-width: 806px) 100vw, 806px\" \/><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u2b50\ufe0f ReactExample6 &#8211; server + swift \ud83d\udc49\ud83c\udffb \uc774\uc804\uc5d0 \ud3ec\uc2a4\ud2b8\ud55c React \ubd80\ubd84\uc758 Active,inActiove\ubc84\ud2bc\uc744 Swift\uc571\uc73c\ub85c \uad6c\ud604\ud55c \ub0b4\uc6a9\uc785\ub2c8\ub2e4.This is the implementation of the Active, inActive buttons from the React section I posted previously into a Swift app. \ud83d\udc49\ud83c\udffb \uc11c\ubc84 \ubd80\ubd84\uc758 \ucf54\ub4dc\ub294 Vite+React\uc758 Express\uc11c\ubc84 \ubd80\ubd84\uacfc \uac19\uc2b5\ub2c8\ub2e4.The code for the server part is the same as the Express server part [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,1],"tags":[],"class_list":["post-4559","post","type-post","status-publish","format-standard","hentry","category-swift","category-uncategorized","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/4559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=4559"}],"version-history":[{"count":52,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/4559\/revisions"}],"predecessor-version":[{"id":4620,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/4559\/revisions\/4620"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=4559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=4559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=4559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}