배열을 AnyObject 유형으로 인스턴스화하고 문자열 객체를 배열에 추가하면 다음 코드가 컴파일되지만 텍스트 필드에이 배열을 표시하려고하면 충돌이 발생합니다. 디버그 콘솔로 출력하려고 할 때 프로그램은 여전히 충돌하며 다음 오류 메시지가 표시됩니다. "치명적인 오류 : Objective-C에서 어레이를 브리지 할 수 없습니다." 다음 방법은 swift와 호환되지 않습니까?
print ((jumperCablesRoles as! [String]). joinWithSeparator ( ","))
다음은 전체 코드베이스입니다.
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
var rejuvenatedEnterprisesEmployees = [
Employees(name: "Jeffrey Wells", employeeRoles: ["Accountant", "Designer"], departmentID: 0),
Employees(name: "Victor Atkins", employeeRoles: ["Director of IT", "Sales Stategist"], departmentID: 0),
Employees(name: "Kelli Hamilton", employeeRoles: ["Director of Sales"], departmentID: 0),
Employees(name: "Adam Braun", employeeRoles: ["Sales Lead"], departmentID: 1),
Employees(name: "Brian Cruz", employeeRoles: ["Designer"], departmentID: 1),
Employees(name: "Kristen Floyd", employeeRoles: ["Developer"], departmentID: 1),
Employees(name: "Lois Martinez", employeeRoles: ["Curator", "Blogger"], departmentID: 2),
Employees(name: "Michael Lind", employeeRoles: ["Sales, Administrator"], departmentID: 2),
Employees(name: "Eric Bay", employeeRoles: ["Database Admin"], departmentID: 2),
Employees(name: "Brandon Young", employeeRoles: ["Artist"], departmentID: 2)
]
var rejuvenatedEnterprisesVictorsEmployees = [
Employees(name: "Victor Atkins", employeeRoles: ["Director of IT", "Sales Stategist"], departmentID: 0),
Employees(name: "Adam Braun", employeeRoles: ["Sales Lead"], departmentID: 1),
Employees(name: "Brian Cruz", employeeRoles: ["Designer"], departmentID: 1),
Employees(name: "Kristen Floyd", employeeRoles: ["Developer"], departmentID: 1)
]
var rejuvenatedEnterprisesKellisEmployees = [
Employees(name: "Kelli Hamilton", employeeRoles: ["Director of Sales"], departmentID: 0),
Employees(name: "Lois Martinez", employeeRoles: ["Curator", "Blogger"], departmentID: 2),
Employees(name: "Michael Lind", employeeRoles: ["Sales, Administrator"], departmentID: 2),
Employees(name: "Eric Bay", employeeRoles: ["Database Admin"], departmentID: 2),
Employees(name: "Brandon Young", employeeRoles: ["Artist"], departmentID: 2)
]
var jumperCables: [String] = []
var jumperCablez: [String] = []
var jumperCablic: [String] = []
var jumperCablesRoles: [AnyObject] = []
var jumperCablezRoles: [String] = []
var jumperCablicRoles: [String] = []
@IBOutlet weak var employeePicker: UIPickerView!
@IBOutlet weak var employeeNameLabel: UILabel!
@IBOutlet weak var employeeListing: UITextView!
@IBAction func addEmployee(sender: AnyObject) {
}
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBAction func indexChanged(sender: UISegmentedControl) {
switch segmentedControl.selectedSegmentIndex
{
case 0:
let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
chosenManagerScrollView.backgroundColor = UIColor.yellowColor()
var jumperCables: [String] = []
for var i = 0; i < rejuvenatedEnterprisesEmployees.count ; ++i {
jumperCables.append(rejuvenatedEnterprisesEmployees[i].name)
}
chosenManagerScrollView.text = jumperCables[0]
employeePicker.reloadAllComponents()
case 1 where segmentedControl.selectedSegmentIndex == 1:
let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
chosenManagerScrollView.backgroundColor = UIColor.greenColor()
var jumperCablez: [String] = []
for var i = 0; i < rejuvenatedEnterprisesVictorsEmployees.count ; ++i {
jumperCablez.append(rejuvenatedEnterprisesVictorsEmployees[i].name)
chosenManagerScrollView.text = rejuvenatedEnterprisesVictorsEmployees[i].name
}
employeePicker.reloadAllComponents()
case 2 where segmentedControl.selectedSegmentIndex == 2:
let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
chosenManagerScrollView.backgroundColor = UIColor.orangeColor()
var jumperCablig: [String] = []
for var i = 0; i < rejuvenatedEnterprisesKellisEmployees.count ; ++i {
jumperCablig.append(rejuvenatedEnterprisesKellisEmployees[i].name)
}
chosenManagerScrollView.text = jumperCablig[0]
employeePicker.reloadAllComponents()
default:
break;
}
}
override func viewDidLoad() {
super.viewDidLoad()
employeePicker.dataSource = self
employeePicker.delegate = self
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
switch segmentedControl.selectedSegmentIndex
{
case 0:
return rejuvenatedEnterprisesEmployees.count
case 1 where segmentedControl.selectedSegmentIndex == 1:
return rejuvenatedEnterprisesVictorsEmployees.count
case 2 where segmentedControl.selectedSegmentIndex == 2:
return rejuvenatedEnterprisesKellisEmployees.count
default:
return 5
}
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
switch segmentedControl.selectedSegmentIndex
{
case 0:
var jumperCabled: [String] = []
for var i = 0; i < rejuvenatedEnterprisesEmployees.count ; ++i {
jumperCabled.append(rejuvenatedEnterprisesEmployees[i].name)
}
return jumperCabled[row]
case 1 where segmentedControl.selectedSegmentIndex == 1:
var jumperCabling: [String] = []
for var i = 0; i < rejuvenatedEnterprisesVictorsEmployees.count ; ++i {
jumperCabling.append(rejuvenatedEnterprisesVictorsEmployees[i].name)
}
return jumperCabling[row]
case 2 where segmentedControl.selectedSegmentIndex == 2:
var jumperCab: [String] = []
for var i = 0; i < rejuvenatedEnterprisesKellisEmployees.count ; ++i {
jumperCab.append(rejuvenatedEnterprisesKellisEmployees[i].name)
}
return jumperCab[row]
default:
return "datsource corrupted"
}
}
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) ->UIView {
switch segmentedControl.selectedSegmentIndex
{
case 0:
let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
chosenManagerScrollView.backgroundColor = UIColor.yellowColor()
for var i = 0; i < rejuvenatedEnterprisesEmployees.count ; ++i {
jumperCables.append(rejuvenatedEnterprisesEmployees[i].name)
jumperCablesRoles.append(rejuvenatedEnterprisesEmployees[i].employeeRoles)
}
chosenManagerScrollView.text = jumperCables[row]
return chosenManagerScrollView
case 1 where segmentedControl.selectedSegmentIndex == 1:
let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
chosenManagerScrollView.backgroundColor = UIColor.greenColor()
for var i = 0; i < rejuvenatedEnterprisesVictorsEmployees.count ; ++i {
jumperCablez.append(rejuvenatedEnterprisesVictorsEmployees[i].name)
}
chosenManagerScrollView.text = jumperCablez[row]
return chosenManagerScrollView
case 2 where segmentedControl.selectedSegmentIndex == 2:
let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
chosenManagerScrollView.backgroundColor = UIColor.orangeColor()
for var i = 0; i < rejuvenatedEnterprisesKellisEmployees.count ; ++i {
jumperCablic.append(rejuvenatedEnterprisesKellisEmployees[i].name)
}
chosenManagerScrollView.text = jumperCablic[row]
return chosenManagerScrollView
default:
let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
chosenManagerScrollView.backgroundColor = UIColor.orangeColor()
for var i = 0; i < rejuvenatedEnterprisesEmployees.count ; ++i {
jumperCables.append(rejuvenatedEnterprisesEmployees[i].name)
}
chosenManagerScrollView.text = jumperCables[row]
return chosenManagerScrollView
}
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch segmentedControl.selectedSegmentIndex
{
case 0:
employeeNameLabel.text = jumperCables[row]
//employeeListing.text = (jumperCablesRoles as! [String]).joinWithSeparator(",")
print((jumperCablesRoles as! [String]).joinWithSeparator(","))
case 1 where segmentedControl.selectedSegmentIndex == 1:
employeeNameLabel.text = jumperCablez[row]
case 2 where segmentedControl.selectedSegmentIndex == 2:
employeeNameLabel.text = jumperCablic[row]
default:
employeeNameLabel.text = jumperCables[row]
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
현재 겪고있는 문제는 다음 코드 줄에 있습니다 jumperCablesRoles.append(rejuvenatedEnterprisesEmployees[i].employeeRoles)
..
내가 알 수있는 한, s 자체 ( ) 의 employeeRoles
배열입니다 . 이는 직원 을 배열에 추가하면 실제로 s의 배열을 포함하는 배열임을 의미 합니다. ( ). 이것이 강제로 캐스팅하려고 할 때 실패하는 이유입니다.String
[String]
employeeRoles
jumperCablesRoles
jumperCablesRoles
String
[[String]]
[String]
원하는 결과가 정확히 무엇인지 잘 모르겠으므로 도움을 드릴 수는 없지만 원하는 경우 각 요소를 employeeRoles
개별적으로 추가 할 수 있습니다 jumperCablesRoles
. 그것이 당신이 원하는 것이라면 코멘트를 남겨 주시면 추가 코드를 제공하겠습니다.
편집 : 방금 진행하여 어쨌든 해결책을 찾았 jumperCablesRoles.append(rejuvenatedEnterprisesEmployees[i].employeeRoles)
습니다. 다음으로 간단히 교체하십시오 .
rejuvenatedEnterprisesEmployees[i].employeeRoles.forEach {jumperCablesRoles.append($0)}
이것은 모든 employeeRole
( String
)을 jumperCablesRoles
개별적으로 추가합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다