
언어 🇰🇷 한국어
문서
시작하기
인증
사용법
iOS 앱에 댓글 추가하기
이것은 FastComments 공식 iOS 라이브러리입니다.
iOS 앱에 실시간 댓글, 채팅 및 리뷰 위젯을 임베드하세요.
리포지토리
기능 
- 중첩된 답글과 페이징을 갖는 스레드형 댓글 트리
- 게시물 생성, 리액션, 미디어 첨부를 지원하는 소셜 피드
- 자동 스크롤 및 날짜 구분자가 있는 라이브 채팅 모드
- WebSocket을 통한 실시간 업데이트(새 댓글, 투표, 접속 상태)
- 싱글 사인온(Simple SSO는 테스트용, Secure SSO는 운영용)
- 굵게, 이탤릭, 코드, @멘션을 지원하는 리치 텍스트 편집
- 위/아래 화살표 또는 하트 등 설정 가능한 스타일의 투표
- 모더레이션 작업: 신고, 고정, 잠금, 차단
- 프리셋과 완전한 커스터마이징을 제공하는 종합적인 테마
- 댓글 및 피드 게시물 작성을 위한 맞춤 툴바 버튼
- 이미지 업로드
- EU 리전 지원
- 사용자 접속 상태(온라인/오프라인 표시)
- 태그 기반 피드 필터링
- 현지화 지원
설치 
Add FastCommentsUI를 Swift Package Manager를 사용하여 프로젝트에 추가하십시오.
Xcode에서: File > Add Package Dependencies, 그런 다음 저장소 URL을 입력하십시오.
Package.swift에 추가하거나:
dependencies: [
.package(url: "https://github.com/fastcomments/fastcomments-ios.git", from: "2.0.0")
]
그런 다음 제품을 대상에 추가하십시오:
.target(
name: "YourApp",
dependencies: [
.product(name: "FastCommentsUI", package: "fastcomments-ios")
]
)
필요한 곳에 두 모듈을 모두 import하십시오:
import FastCommentsUI
import FastCommentsSwift
빠른 시작 
댓글 위젯을 표시하기 위한 최소 설정:
import SwiftUI
import FastCommentsUI
struct ContentView: View {
@StateObject private var sdk = FastCommentsSDK(
config: FastCommentsWidgetConfig(
tenantId: "demo",
urlId: "my-page-1",
url: "https://example.com/page-1",
pageTitle: "My Page"
)
)
var body: some View {
FastCommentsView(sdk: sdk)
.task {
try? await sdk.load()
}
}
}
Replace "demo" with your FastComments tenant ID. The urlId identifies the page or thread where comments are stored.
인증(SSO) 
FastComments는 세 가지 인증 모드를 지원합니다:
- 익명 -- SSO 토큰 없음; 사용자는 세션 기반 식별자를 받습니다
- 간단한 SSO -- 데모 및 테스트용 클라이언트 측 토큰(보안 아님)
- 보안 SSO -- 프로덕션용 서버 서명 토큰
간단한 SSO
데모 및 로컬 테스트에 유용합니다. 간단한 SSO는 누구나 임의의 사용자를 가장할 수 있으므로 프로덕션 환경에서는 사용하지 마세요.
import FastCommentsSwift
let userData = SimpleSSOUserData(
username: "Jane Doe",
email: "jane@example.com",
avatar: "https://example.com/avatar.jpg"
)
let sso = FastCommentsSSO.createSimple(simpleSSOUserData: userData)
let token = try? sso.prepareToSend()
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page-1",
sso: token
)
let sdk = FastCommentsSDK(config: config)
SimpleSSOUserData는 또한 선택적 필드를 지원합니다:
id-- 사용자 ID (설정하지 않으면 이메일을 기본값으로 사용)displayName-- 별도의 표시 이름displayLabel-- 이름 옆에 표시되는 사용자 지정 레이블(예: "VIP")websiteUrl-- 사용자 이름에 대한 링크locale-- 로케일 코드isProfileActivityPrivate-- 프로필 활동 숨기기(기본값: true)
보안 SSO
프로덕션에서는 백엔드가 API 시크릿을 사용하여 서명된 SSO 토큰을 생성합니다. iOS 앱은 이 토큰을 서버에서 가져와서 config에 전달합니다.
백엔드에서 (FastComments Swift SDK를 사용하거나 다른 언어로):
let userData = SecureSSOUserData(
id: "user-123",
email: "user@example.com",
username: "Display Name",
avatar: "https://example.com/avatar.jpg"
)
let sso = try FastCommentsSSO.createSecure(apiKey: "YOUR_API_KEY", secureSSOUserData: userData)
let token = try sso.prepareToSend()
// 이 토큰을 API를 통해 iOS 앱으로 반환하세요
iOS 앱에서:
struct MyView: View {
@StateObject private var sdk = FastCommentsSDK(
config: FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page-1"
)
)
@State private var isLoadingToken = true
var body: some View {
Group {
if isLoadingToken {
ProgressView("Loading...")
} else {
FastCommentsView(sdk: sdk)
}
}
.task {
// 백엔드에서 토큰을 가져옵니다
let token = try? await fetchSSOTokenFromYourBackend()
// 토큰으로 새 구성(config)을 생성하거나 로드 전에 설정하세요
isLoadingToken = false
try? await sdk.load()
}
}
}
SecureSSOUserData는 추가 필드를 지원합니다:
optedInNotifications-- 이메일 알림 수신 동의displayLabel-- 사용자 지정 레이블displayName-- 표시 이름websiteUrl-- 웹사이트 URLgroupIds-- 그룹 소속isAdmin-- 관리자 권한isModerator-- 중재자 권한isProfileActivityPrivate-- 프로필 공개 여부
스레드 댓글 
기본 사용법
struct CommentsPage: View {
@StateObject private var sdk = FastCommentsSDK(
config: FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "article-42",
url: "https://example.com/article/42",
pageTitle: "Article Title"
)
)
var body: some View {
FastCommentsView(sdk: sdk)
.task {
try? await sdk.load()
}
}
}
투표 스타일
기본 투표 스타일은 상/하 화살표를 표시합니다. 하트 스타일 투표를 사용하려면 ._1 을 전달하세요:
FastCommentsView(sdk: sdk, voteStyle: ._1)| Style | Appearance |
|---|---|
._0 | 상/하 화살표 버튼과 합계 카운트 |
._1 | 하나의 하트 버튼과 카운트 |
이벤트 콜백
모디파이어 스타일의 콜백을 사용하여 사용자 상호작용을 처리하세요:
FastCommentsView(sdk: sdk)
.onCommentPosted { comment in
print("New comment: \(comment.commentHTML)")
}
.onReplyClick { renderableComment in
print("Replying to: \(renderableComment.comment.id)")
}
.onUserClick { context, userInfo, source in
// source는 .name 또는 .avatar 입니다
print("Tapped \(userInfo.displayName)")
}
테마 적용
SwiftUI 환경을 통해 테마를 전달하세요:
FastCommentsView(sdk: sdk)
.fastCommentsTheme(myTheme)
.task { try? await sdk.load() }
또는 SDK에 직접 설정하세요:
sdk.theme = FastCommentsTheme.modern
정렬 방향
sdk.defaultSortDirection = .nf // 최신순 (기본값)
sdk.defaultSortDirection = .of // 오래된 순
sdk.defaultSortDirection = .mr // 관련성 높은 순
실시간 채팅 
LiveChatView는 자동 스크롤, 날짜 구분선, 컴팩트 레이아웃을 갖춘 실시간 채팅 환경을 제공합니다. SDK를 가장 오래된 항목 우선 정렬 및 즉시 라이브 표시로 자동 구성합니다.
struct ChatView: View {
@StateObject private var sdk: FastCommentsSDK = {
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "chat-room-1",
sso: ssoToken // 사용자의 이름 표시를 위해 SSO 사용을 권장합니다
)
return FastCommentsSDK(config: config)
}()
var body: some View {
LiveChatView(sdk: sdk)
.onCommentPosted { comment in
print("Sent: \(comment.commentHTML)")
}
.task {
try? await sdk.load()
}
}
}
LiveChatView는 다음 콜백을 지원합니다:
.onCommentPosted-- 사용자가 메시지를 보낼 때 호출됩니다.onCommentDeleted-- 메시지가 삭제될 때 호출됩니다.onUserClick-- 사용자의 이름이나 아바타를 탭했을 때 호출됩니다
소셜 피드 
피드 시스템은 자체 뷰를 가진 별도의 SDK (FastCommentsFeedSDK)입니다.
피드 로드 및 표시
struct FeedPage: View {
@StateObject private var sdk: FastCommentsFeedSDK = {
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-feed",
sso: ssoToken
)
return FastCommentsFeedSDK(config: config)
}()
@State private var commentsPost: FeedPost?
var body: some View {
FastCommentsFeedView(sdk: sdk)
.onPostSelected { post in
commentsPost = post
}
.onCommentsRequested { post in
commentsPost = post
}
.onSharePost { post in
// 공유 시트 표시
}
.onUserClick { context, userInfo, source in
// 사용자 프로필로 이동
}
.onMediaClick { mediaItem, index in
// 전체 화면 이미지 뷰어 표시
}
.task {
try? await sdk.loadIfNeeded()
}
}
}
피드 뷰에는 풀 투 리프레시 및 무한 스크롤이 자동으로 포함됩니다. 화면 라이프사이클 재진입 시 기존 또는 복원된 피드가 페이지 1로 다시 설정되지 않도록 loadIfNeeded()를 사용하세요.
게시물 생성
게시물 작성 폼을 표시하려면 FeedPostCreateView를 사용하세요:
@State private var showCreatePost = false
// In your view body:
.sheet(isPresented: $showCreatePost) {
FeedPostCreateView(
sdk: sdk,
onPostCreated: { post in
showCreatePost = false
Task { try? await sdk.refresh() }
},
onCancelled: {
showCreatePost = false
}
)
}
게시물에 반응하기
SDK는 낙관적 업데이트(optimistic updates)로 반응을 처리합니다:
try await sdk.reactPost(postId: post.id, reactionType: "l")
// Check reaction state
let hasLiked = sdk.hasUserReacted(postId: post.id, reactType: "l")
let likeCount = sdk.getLikeCount(postId: post.id)
게시물의 댓글 열기
피드 게시물의 댓글을 표시하려면 CommentsSheet를 사용하세요. 이는 내부적으로 피드 SDK의 설정을 사용하여 FastCommentsSDK 인스턴스를 생성합니다:
.sheet(item: $commentsPost) { post in
CommentsSheet(post: post, feedSDK: sdk, onUserClick: { context, userInfo, source in
// 사용자 클릭 처리
})
}
참고: .sheet(item:)을(를) 사용하려면 FeedPost가 Identifiable를 준수해야 합니다. 다음 확장(extension)을 추가하세요:
extension FeedPost: @retroactive Identifiable {}
태그 기반 피드 필터링
피드 게시물을 태그로 필터링하려면 TagSupplier 프로토콜을 구현하세요:
struct TeamTagSupplier: TagSupplier {
func getTags(currentUser: UserSessionInfo?) -> [String]? {
guard let user = currentUser else { return nil }
return ["team:\(user.id ?? "")", "public"]
}
}
sdk.tagSupplier = TeamTagSupplier()
필터링되지 않은 전역 피드의 경우 nil을 반환하세요.
피드 상태 저장 및 복원
뷰 라이프사이클 이벤트 전반에 걸쳐 페이지네이션 상태를 보존하세요:
let state = sdk.savePaginationState()
// Later...
sdk.restorePaginationState(state)
try? await sdk.loadIfNeeded()
화면이 일시적으로 사라지는 경우, 피드 뷰는 라이브 업데이트를 자동으로 일시 중지하고 다시 나타날 때 로드된 게시물을 지우지 않고 업데이트를 재개합니다. SDK 인스턴스를 완전히 더 이상 사용하지 않을 때만 sdk.cleanup()을 호출하세요.
게시물 삭제
sdk.onPostDeleted = { postId in
print("Post \(postId) was deleted")
}
테마 설정 
테마 프리셋
네 가지 내장 프리셋이 제공됩니다:
// 시스템 기본값
sdk.theme = FastCommentsTheme.default
// 그림자와 큰 둥근 모서리가 있는 카드
sdk.theme = FastCommentsTheme.modern
// 플랫(그림자 없음), 작은 모서리 반경, 스레드 라인 없음
sdk.theme = FastCommentsTheme.minimal
// 모든 액션 색상을 단일 브랜드 색상으로 설정
sdk.theme = FastCommentsTheme.allPrimary(.indigo)
댓글 표시 스타일
var theme = FastCommentsTheme()
theme.commentStyle = .flat // 구분선이 있는 플랫 리스트 (기본)
theme.commentStyle = .card // 그림자가 있는 둥근 카드
theme.commentStyle = .bubble // 채팅 버블 스타일
색상
모든 색상 속성은 선택 사항입니다. 설정되지 않은 값은 적절한 시스템 기본값으로 대체됩니다.
var theme = FastCommentsTheme()
// 브랜드 색상
theme.primaryColor = .indigo
theme.primaryLightColor = .indigo.opacity(0.6)
theme.primaryDarkColor = Color(red: 0.2, green: 0.1, blue: 0.5)
// 배경
theme.commentBackgroundColor = Color(.secondarySystemGroupedBackground)
theme.containerBackgroundColor = Color(.systemGroupedBackground)
// 액션 버튼
theme.actionButtonColor = .indigo
theme.replyButtonColor = .indigo
theme.toggleRepliesButtonColor = .indigo.opacity(0.8)
theme.loadMoreButtonTextColor = .indigo
// 투표
theme.voteActiveColor = .red
theme.voteCountColor = .primary
theme.voteCountZeroColor = .secondary
theme.voteDividerColor = Color(.separator)
// 링크
theme.linkColor = .indigo
theme.linkColorPressed = .indigo.opacity(0.5)
// 다이얼로그
theme.dialogHeaderBackgroundColor = .indigo
theme.dialogHeaderTextColor = .white
// 입력 바
theme.inputBarBackgroundColor = Color(.systemBackground)
theme.inputBarBorderColor = Color(.separator)
// 기타
theme.onlineIndicatorColor = .green
theme.separatorColor = Color(.separator)
theme.badgeBackgroundColor = .gray.opacity(0.2)
theme.threadLineColor = .indigo.opacity(0.15)
타이포그래피
theme.commenterNameFont = .subheadline.weight(.bold)
theme.bodyFont = .body
theme.captionFont = .caption
theme.actionFont = .caption.weight(.medium)
레이아웃 및 간격
theme.cornerRadius = .large // .none, .small, .medium, .large
theme.commentSpacing = 4 // 댓글 행 사이의 간격(포인트)
theme.nestingIndent = 20 // 중첩 수준당 들여쓰기(포인트)
theme.avatarSize = 36 // 루트 댓글의 아바타 지름
theme.replyAvatarSize = 28 // 중첩된 답글의 아바타 지름
시각 효과
theme.showShadows = true // 카드에 미묘한 그림자
theme.showThreadLine = true // 중첩된 답글을 연결하는 수직선
theme.animateVotes = true // 투표 변경 시 스프링 애니메이션
테마 적용
두 가지 방법:
// Via SwiftUI environment (recommended for view hierarchy)
FastCommentsView(sdk: sdk)
.fastCommentsTheme(theme)
// Directly on the SDK
sdk.theme = theme
사용자 정의 툴바 버튼 
Comment Toolbar Buttons
댓글 입력 툴바에 버튼을 추가하려면 CustomToolbarButton 프로토콜을 구현하세요:
struct EmojiButton: CustomToolbarButton {
let id = "emoji"
let iconSystemName = "face.smiling" // SF 심볼 이름
let contentDescription = "Add Emoji"
let badgeText: String? = nil // 선택적 배지 카운트
func onClick(text: Binding<String>) {
text.wrappedValue += "\u{1F44D}"
}
// Optional overrides (default to true)
func isEnabled() -> Bool { true }
func isVisible() -> Bool { true }
}
뷰를 생성할 때 커스텀 버튼을 전달하세요:
FastCommentsView(
sdk: sdk,
customToolbarButtons: [EmojiButton(), CodeBlockButton()]
)
또는 SDK에 전역으로 추가하여 모든 인스턴스에 적용할 수 있습니다:
sdk.addGlobalCustomToolbarButton(EmojiButton())
sdk.removeGlobalCustomToolbarButton(id: "emoji")
sdk.clearGlobalCustomToolbarButtons()
Feed Toolbar Buttons
게시물 생성 폼에 대해 FeedCustomToolbarButton을 구현하세요:
struct HashtagButton: FeedCustomToolbarButton {
let id = "hashtag"
let iconSystemName = "number"
let contentDescription = "Add Hashtag"
func onClick(content: Binding<String>) {
content.wrappedValue += "#"
}
}
생성 뷰에 전달하세요:
FeedPostCreateView(
sdk: sdk,
customToolbarButtons: [HashtagButton()],
onPostCreated: { _ in },
onCancelled: { }
)
또는 피드 SDK에서 전역으로 설정하세요:
sdk.globalFeedToolbarButtons = [HashtagButton()]
모더레이션 
모든 사용자가 사용할 수 있는 행동
- Flag/Unflag -- 댓글을 검토하기 위해 신고합니다
try await sdk.flagComment(commentId: commentId)
try await sdk.unflagComment(commentId: commentId)
- Block/Unblock -- 사용자의 모든 댓글을 숨깁니다 (조회자별)
try await sdk.blockUser(commentId: commentId)
try await sdk.unblockUser(commentId: commentId)
관리자 전용 행동
- Pin/Unpin -- 댓글을 스레드 상단에 고정합니다
try await sdk.pinComment(commentId: commentId)
try await sdk.unpinComment(commentId: commentId)
- Lock/Unlock -- 새로운 답글을 방지하고, 잠금 해제될 때까지 편집 및 삭제를 차단합니다 (모든 사용자, 관리자 포함)
try await sdk.lockComment(commentId: commentId)
try await sdk.unlockComment(commentId: commentId)
모든 관리 작업은 UI의 댓글 컨텍스트 메뉴에서도 사용할 수 있습니다. 관리 작업은 현재 사용자가 사이트 관리자일 때만 표시됩니다 (SSO isAdmin 플래그 또는 대시보드 설정을 통해 지정).
실시간 업데이트 
sdk.load()를 호출한 후, SDK는 구성된 urlId에 대한 WebSocket 이벤트를 자동으로 구독합니다. 다음 이벤트들이 처리됩니다:
- 새로운 댓글, 수정 및 삭제
- 투표 (새로운 투표 및 취소)
- 고정, 잠금, 신고 및 차단 상태 변경
- 사용자 접속(입장/퇴장)
- 스레드 열림/닫힘
- 배지 수여
- 서버 구성 업데이트
실시간 표시 제어
기본적으로 다른 사용자의 새 댓글은 즉시 표시됩니다:
sdk.showLiveRightAway = true // 기본값: 즉시 표시
이를 false로 설정하면 새 댓글이 "N개의 새 댓글" 버튼 뒤에 버퍼되어 사용자가 언제 표시할지 선택할 수 있습니다:
sdk.showLiveRightAway = false
사용자 접속
서버가 접속 상태 추적을 활성화하면 온라인/오프라인 표시기가 사용자 아바타에 자동으로 표시됩니다. 클라이언트에서 추가 구성은 필요하지 않습니다.
페이지네이션 
Page Size
// 댓글: 기본값 30
sdk.pageSize = 50
// 피드: 기본값 10
feedSDK.pageSize = 20
Loading More Comments
The UI shows pagination controls automatically. You can also trigger pagination programmatically:
// 다음 페이지 로드
try await sdk.loadMore()
// 모든 남은 항목 로드 (성능 상 댓글이 2000개 초과인 경우 비활성화됨)
try await sdk.loadAll()
// 상태 확인
sdk.hasMore // 더 많은 페이지가 있는지
sdk.shouldShowLoadAll()
sdk.getCountRemainingToShow()
Child Comment Pagination
중첩된 답글은 지연 로드됩니다. 사용자가 스레드를 확장하면 처음 5개의 자식이 로드됩니다. 더 많은 항목이 있으면 "더 많은 답글 불러오기" 컨트롤이 나타납니다. 이 동작은 UI에서 자동으로 처리됩니다.
상태 및 관찰성 
Both FastCommentsSDK와 FastCommentsFeedSDK는 @Published 속성을 가진 ObservableObject 클래스입니다. SwiftUI 뷰에서 이를 관찰하여 반응형 UI 업데이트를 할 수 있습니다.
FastCommentsSDK Published 속성
| Property | Type | Description |
|---|---|---|
commentCountOnServer | Int | 서버의 전체 댓글 수 |
newRootCommentCount | Int | 버퍼된 새 댓글들 (showLiveRightAway가 false일 때) |
currentUser | UserSessionInfo? | 현재 인증된 사용자 |
isSiteAdmin | Bool | 현재 사용자가 사이트 관리자인지 여부 |
isClosed | Bool | 댓글 스레드가 닫혔는지 여부 |
hasBillingIssue | Bool | 청구 관련 문제가 있는지 여부 |
isLoading | Bool | 네트워크 요청이 진행 중인지 여부 |
hasMore | Bool | 추가 댓글 페이지가 존재하는지 여부 |
blockingErrorMessage | String? | UI 작동을 방해하는 오류 |
warningMessage | String? | 비차단 경고 메시지 |
isDemo | Bool | 데모 모드로 실행 중인지 여부 |
commentsVisible | Bool | 댓글 표시 토글 |
toolbarEnabled | Bool | 서식 툴바가 표시되는지 여부 |
FastCommentsFeedSDK Published 속성
| Property | Type | Description |
|---|---|---|
feedPosts | [FeedPost] | 현재 로드된 피드 게시물 |
hasMore | Bool | 추가 페이지가 존재하는지 여부 |
currentUser | UserSessionInfo? | 현재 인증된 사용자 |
blockingErrorMessage | String? | 차단 오류 메시지 |
isLoading | Bool | 네트워크 요청이 진행 중인지 여부 |
newPostsCount | Int | 마지막 로드 이후 새 게시물 수 |
댓글 트리
댓글 트리는 sdk.commentsTree를 통해 접근할 수 있습니다:
// 렌더링을 위한 표시된 노드의 평탄(Flat) 목록
sdk.commentsTree.visibleNodes
// ID로 댓글 조회
sdk.commentsTree.commentsById["comment-id"]
EU 리전 
EU 데이터 센터를 사용하려면 구성의 region 필드를 설정하세요:
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page",
region: "eu"
)
이렇게 하면 모든 API 요청과 WebSocket 연결이 eu.fastcomments.com으로 라우팅됩니다.
정리 
SDK 인스턴스 사용을 마쳤을 때(예: 뷰가 닫히는 경우), WebSocket 연결을 닫고 백그라운드 작업을 취소하려면 cleanup()을 호출하세요:
sdk.cleanup()
SwiftUI의 @StateObject로 관리되는 뷰의 경우, 일반적으로 .onDisappear에서 호출하거나 뷰가 해제될 때 호출합니다.
이미지 업로드 
댓글
let imageUrl = try await sdk.uploadImage(imageData: jpegData, filename: "photo.jpg")
업로드된 이미지의 URL 문자열을 반환합니다.
피드 게시물
let mediaItem = try await feedSDK.uploadImage(imageData: jpegData, filename: "photo.jpg")
// 여러 이미지를 병렬로 업로드
let mediaItems = try await feedSDK.uploadImages(images: [
(jpegData1, "photo1.jpg"),
(jpegData2, "photo2.jpg")
])
사용자 언급 
@mention 자동완성을 지원하기 위해 사용자를 검색:
let results = try await sdk.searchUsers(query: "jan")
// [UserSearchResult]를 반환합니다. userId, username, avatar 등을 포함합니다.
내장된 CommentInputBar가 @mention 자동완성을 자동으로 처리합니다.
댓글 편집 및 삭제 
편집
try await sdk.editComment(commentId: commentId, newText: "Updated text")
서버가 HTML을 다시 렌더링합니다. 로컬 댓글이 자동으로 업데이트됩니다.
삭제
try await sdk.deleteComment(commentId: commentId)
댓글을 삭제하면 그 댓글의 하위 댓글들도 로컬 트리에서 함께 제거됩니다.
두 작업 모두 현재 사용자가 댓글 작성자(또는 사이트 관리자)인 경우 UI의 댓글 컨텍스트 메뉴를 통해 이용할 수 있습니다.
오류 처리 
SDK 메서드는 FastCommentsError를 던지며, 이는 LocalizedError를 준수합니다:
do {
try await sdk.load()
} catch let error as FastCommentsError {
print(error.translatedError ?? error.reason ?? "Unknown error")
} catch {
print(error.localizedDescription)
}
FastCommentsError 속성:
code-- API의 오류 코드reason-- 영어 오류 설명translatedError-- 서버에서 제공한 현지화된 오류 메시지
차단 오류는 또한 sdk.blockingErrorMessage를 통해 자동으로 노출되며, 내장 뷰가 이를 사용자에게 표시합니다.
도움을 받으시겠어요?
iOS 라이브러리에서 문제가 발생하거나 질문이 있는 경우, 다음을 이용해 주세요:
기여하기
기여를 환영합니다! 기여 지침은 GitHub 저장소를 방문하세요.