2014-10-23 10 views
2

plist에서 객체를 가져 와서 Swift에서 CLCircularRegion을 만들려고하는데이 값을 사용하려고하면이 오류가 나타납니다.AnyObject로 올라가지 않고 Swift에서 plist 값을 어떻게 사용합니까?

형식의 인수 목록과 함께 'init'을 호출 할 수 없습니다. '(중심 : $ T3, 반지름 : @lvalue AnyObject?, 식별자 : @lvalue AnyObject ?!)'

내가 볼 수있는 것처럼 잘 작동하는 plist에서 데이터를 가져 오는 데 사용하는 방법은 다음과 같습니다. println 호출을 통해 내용.

func setupLocations() { 
// Region plist 
let regionArray = NSArray(contentsOfFile: NSBundle.mainBundle().pathForResource("Landmarks", ofType: "plist")!) 

println(regionArray) 

for location in regionArray! { 
    var longitudeNumber = location["Longitude"] 
    var latitudeNumber = location["Latitude"] 
    var rangeNumber = location["Range"] 
    var regionString = location["Identifier"] 

    let newRegion = CLCircularRegion(center: CLLocationCoordinate2DMake(latitudeNumber, longitudeNumber), radius: rangeNumber, identifier: regionString) 
    } 
} 

plist 내에서 개체는 사전을 포함하는 배열로 저장됩니다. 이 사전에는 세 개의 숫자 값과 한 개의 문자열 값이 포함됩니다.

답변

0

사전에서 추출한 값은 모두 선택 사항이며 AnyObject 유형입니다.

var longitudeNumber = location["Longitude"] as? Double 
var latitudeNumber = location["Latitude"] as? Double 
var rangeNumber = location["Range"] as? Int 
var regionString = location["Identifier"] as? String 

(나는 변수 이름에 내놓고 유형을 추론하지만, 당신이 기대하는 실제 유형의 코스 변경) 할 수

우선은 실제 형식으로 명시 적 캐스트를 만들 수 있습니다.

다음, 당신은 하나가 선택 바인딩을 사용해야하지만, 4 단순히 if, 이상 중첩의 때문에 그 추한 보일 것이다

if longitudeNumber != nil && latitudeNumber != nil && rangeNumber != nil and regionString != nil { 
    let newRegion = CLCircularRegion(center: CLLocationCoordinate2DMake(latitudeNumber!, longitudeNumber!), radius: rangeNumber!, identifier: regionString!) 
} 

주 강제이 경우 안전 !을 풀기의 사용을 외부 if 문으로 보호되기 때문입니다.

+0

감사합니다. 나는 사전으로부터 온 모든 것이 선택 적이라는 것을 이해하지 못 했으므로, 그들이 AnyObject와 String을 시작으로 왜 그런지 이해할 수있었습니다. –

+0

다른 사람이 대답을 읽고 rangeNumber 게다가 자리에 대 Double 대 Int되고. 답변에서 언급했듯이 유형이 유추되었으며 실제 유형을 사용했습니다. 누가 CLCircularRegion과 비슷한 문제가 있다고 생각하는 경우를 대비하여. –