Function Types Error
cal라는 함수를 옵셔널로 타입지정만 해둔채로, 타함수에서 다른 함수를 할당시키는 예제가 제 에디터에서는 에러가 나는데 원인 알 수 있을까요
func plus(n1: Int, n2: Int) -> Int {
return n1 + n2
}
func minus(n1: Int, n2: Int) -> Int {
return n1 - n2
}
var calc: ((Int, Int) -> Int)?
func selectButton(type: String) {
if type == "+" {
calc = plus
} else if type == "-" {
calc = minus
}
}
var target1 = 1
var target2 = 3
func showResult() {
calc?(target1, target2)
}
Main actor-isolated var 'calc' can not be mutated from a nonisolated context?
Câu trả lời 1
0
예전 Xcode에서는 동시성 검사가 느슨해서 실행됐지만, 최신 Swift에서는 전역 가변 변수인 calc를 MainActor 영역 밖에서 변경하면 에러가 발생합니다.
calc와 이에 접근하는 함수들을 모두 @MainActor로 지정하면 동작합니다.
func plus(n1: Int, n2: Int) -> Int {
return n1 + n2
}
func minus(n1: Int, n2: Int) -> Int {
return n1 - n2
}
// 함수를 저장하는 옵셔널 변수
@MainActor
var calc: ((Int, Int) -> Int)?
@MainActor
var target1 = 1
@MainActor
var target2 = 3
// calc를 변경하므로 @MainActor 지정
@MainActor
func selectButton(type: String) {
if type == "+" {
calc = plus
} else if type == "-" {
calc = minus
} else {
calc = nil
}
}
// calc와 target 값을 사용하므로 @MainActor 지정
@MainActor
func showResult() {
if let result = calc?(target1, target2) {
print(result)
} else {
print("연산자가 선택되지 않았습니다.")
}
}
// 실행
selectButton(type: "+")
showResult() // 4calc의 옵셔널 함수 타입과 calc = plus 같은 함수 할당 방식은 정상입니다.
에러의 원인은 calc가 MainActor에 속해 있는데, 기존의 selectButton과 showResult가 MainActor에 속하지 않은 상태로 접근했기 때문입니다.
Static 선언 시 에러 발생
0
22
1
클로저의 형태로 만들다
0
42
1
패싱1강에서 강의중에 질문 있습니다.
0
93
2
table view 없음
0
126
2
에러 질문 [UITextField setDataSource:]: unrecognized selector sent to instance 0x107079600"
0
229
2
Main interface 지정 방법
0
191
1
Closure_3 Capture List에 참조 타입 값을 작성할 경우에도 deinit 실행되는 이유가 뭘까요?
0
194
2
TodoCell UIview 생성 후 연결 시 오류
0
441
2
테이블 뷰 데이터 업데이트 관련 질문
0
366
2
TODO List Coredata 질문입니다.
0
358
1
혹시 추가예정인 강의가 대략 언제쯤 나오는지 알수있을까요..?
0
377
1
swift에서 import 헤더를 안해도 되는이유가 궁금합니다.
1
648
1
closure 3 에서 weak로 준 부분이 궁금합니다.
0
342
1
concurrency_1 강의 코드 결과 중 이해가 안가는 부분이 있습니다
0
346
1
self.navigationBar.topItem?.leftBarButtonItem을 해도 button이 보이지 않습니다
0
606
2
func 기능을 쓸때 self. 을 왜쓰는지 이해가 잘안되네요 ㅠㅠ
0
426
1
Closure2 강의에서 예문처럼 똑같이 myfunc2, myfunc3 만들었을때
0
392
1
클론강의 tableViewCell
0
416
1
Location.pin강의에서 self질문이요
1
269
1
넷플릭스 table cell 관련해서 질문이 있습니다.
0
523
1
Capturing Valus
0
307
1
안녕하세요 todolist강의중에서 UI구성중 xib파일 오토레이아웃질문입니다.
0
331
1
환율 강의 테이블뷰에서 데이터 관련 질문있습니다.
0
570
2
환율 네트워크처리1 질문있습니다.
0
285
1

