안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2018년 12월 2일 일요일

Swift segue를 이용한 데이터 전달

performSegue(withIdentifier: "createHabbit", sender: self)

위와 같이 performSegue를 통해 segue를 실행한다.
여러개의 segue가 있음으로 Identifier를 이용해서 수행하는 Segue를 명시한다.

그리고 아래와 같이 preparesegue에 수행할 내용을 적는다.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destViewController = segue.destination as! ViewController
        
        destViewController.labelText = self.sendText
        print(destViewController.habbits.count)
        destViewController.habbits.append(Habbit(ischecked: false, habbitName: sendText))

    }

Swift Toggle Button 사용 방법

@IBAction func checkBoxTapped(_ sender: UIButton){
        /*
        UIView.animate(withDuration: 0.5, delay: 0.1, options: .curveLinear,
                       animations: {
                        sender.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
                        
        }) {
            (success) in
            sender.isSelected =  !sender.isSelected
            UIView.animate(withDuration: 0.5, delay: 0.1, options: .curveLinear,
                           animations: {
                            sender.transform = .identity
            },completion: nil)
        }
        */
        if sender.isSelected {
            sender.isSelected = false
        } else {
            sender.isSelected = true
        }

    }

위와 같이 sender 의 isSelected 를 사용해서 토글을 할 수 있다.

주석 처리는 애니메이션 효과를 준 것이다.

 위 자료는 유튜브 동영상을 보고 만든 것이다.

출처: https://youtu.be/S6q5d3RvVY8

Swift Error: Editor placeholder in source file

Swift Error: Editor placeholder in source file


 위 에러는 생성한 value나 class에 값이 들어 있지 않을 때 발생한다.

2018년 11월 28일 수요일

Swift 맛보기

이래저래 어떻게 시작해야 되나 고민이 많았었는데,

결국 역시 Google신과 인터넷에 자세하게 글을 올려놓은 여러 블로거님들 덕분에
시작을 하게 되었다.

 잘은 모르지만, 간단한 느낌은 MFC 할 때와 비슷한 느낌이 든다.

 앞으로 잘 헤쳐나가서 앱을 앱스토어에 한번 올려 보겠다.

2018년 9월 5일 수요일

[Javascript] ForEach

출처: http://blog.kazikai.net/?p=16

배열 메소드 들중에.. 평소에 잘 사용하지 않지만, 사용하면 생산성이 많이 올라가는 메소드 들이다.
하지만 다시 리마인드 하는 의미로 정리하면, 도움이 될것 같다. 익숙한놈도 있고.. 초기에 JS 공부할때 알아뒀지만, 한번도 안써봤던,,(reduce) 같은 놈들은 다시 보니 어색 하기도 하고. 이번기회에 정리를 해보자
아래는 이 포스팅의 원문이 되는 블로그

1. 배열에서특정값이 있는지 찾을때는 indexOf 사용해라 
대부분의 배열에서 indexOf 를 사용 하지 않으면, for loop 를 돌려서 찾을수 밖에 없다. 즉 아래와 같은 코드를 사용 하게 되는데.
var isExist =false;
for( var i = 0; max = array.length; i += 1 ) {
 if( array[i] === "특정값" ){
   isExist = true;
 }
}
위와 같은 코드는 아래와 같이 간단하게 사용할 수 있다.
var isExist = (array.indexOf(“특정값”)!== -1 )
즉  간단하게 위의 for loop 를 한줄로 표현할 수 있으며, 이부분이 생산성이나, 코드 가독성에 도 옳은 영향을 끼친다.
2. filter 사용해보세요:)
이건.. JSON 오브젝트로 이루어진 배열중에 특정 값만 filter 시킬때 유용하다.
var arr = [    
  {"name":"apple", "count": 2},    
  {"name":"orange", "count": 5},    
  {"name":"pear", "count": 3},    
  {"name":"orange", "count": 16}
];    
var newArr = arr.filter(function(item){    
  return item.name === "orange";
});  
console.log("Filter results:",newArr);
위 값의 newArr 은 name이 orange 인 놈만 필터 되서 나온다.
3. forEach()쓰세요
사실 개인적으로 for 루프가 더 성능 향상에 좋다고 해서..( 자바스크립트 성능 최적화에 나온다. ).for 로 풀어서 쓰는데  1ms 도 차이 안나니 그냥 forEach를 쓰라고 가이드 한다.
사용법은 아래와 같다.
var array = [1,2,3,4,5];
array.forEach( function( v, i ){
  if( v === 3 ){
    console.log( v + ":" + i); // 3:2 가 나온다.
  }
});
4. map을 잘 활용하자. 
이전에 jsperf 에서 map이 forEach 보다 더 성능이 빨라서. 개인적으로 array에서 map을 주로 써왔다. 하지만 … map과 forEach는 용도가 미세하게 다른데.. map은 각 루프에서return을 할수있는 것이 특징이다.
( return된 결과의 동일한 배열을 원하는것이 아니라면 forEach가 더 적합하다. )
즉 map을 사용하면, 리턴값으로 같은 길이의 배열이 나오게 된다.
예를들어 …
var a = [1,2,3,4,5];
var b = a.forEach( function(v, i){ console.log(v); return v+1;}});
var c = a.map( function(v, i){ console.log(v); return v+1;});
를 실행해보면차이점이 다르다.  b는 undefined 가 나오며 c 는 [2,3,4,5,6] 이라는 배열이 나온다.즉 배열을 가지고, 연산을 하고 길이가 같은 배열로 결과를 리턴받고 싶을때는 map을 쓰는것이 훨씬 유리하다.
forEach와는 용도가 서로 다르다는것을 기억하자
마지막으로 5..
5.reduce!!  사용하자 
이놈은.. 인자를 어떻게 주냐에 따라 용도가 달라진다.
array.reduce(f,n)
var a= [1,2,3,4,5] //f는 함수 n은 두번째 인자 라고 가정
n이 없을경우 array.reduce(f);를 살펴 보자 
f의 
(0) iteration 
- 첫번째 인자 : 1
- 두번째 인자 : 2
(1) iteration
- 첫번째 인자 : 1,2
- 두번째 인자 : 3
(2) iteration
- 첫번째 인자 : 1,2,3
- 두번째 인자 : 4
(3) iteration
- 첫번째 인자 : 1,2,3,4
- 두번째 인자 : 5
로 나오게 된다.
즉 f 의 인자가 f( a,b,c,d) 라면
a=이전값
b= 현재값
c= 인덱스
d= 배열
로 생각하면 된다.
하지만 reduce 메소드를 불러올때  n을 주게 되면, f의 첫번째 인자가 n이 되게 되는데, 즉 이전초기값이 n으로 대체 된다. 
var a= ["a","b","c","d","e","a","b","a","c","c","c"];
var b = a.reduce(function(x,y){
  console.log("x:", x);
  console.log("y:", y);
  x[y] = ++x[y]|| 1;
  return x;
},{});
console.log(b);
위 예제를 돌려보면 B 는 최종적으로
Object {a: 3, b: 2, c: 4, d: 1, e: 1}
로 리턴된다. 
설명한 5개의 메소드들은  사용하면 개발 생산성 및 가독성이 좋아질 것 같다.

[Gerrit] Change ... closed

change ... closed 가 나타나는 경우에는 두 가지 경우가 있다.

1. 이미 submit 되거나 merge 된 경우
    a. change-id를 지운다.
    b. commit hook 이나 egit으로 신규 change-id를 발행한다.
    c. 이미 submit 된 변경사항이 있기에 commit을 rebase 하는 것을 추천한다.
    d. 다시 push 하면 성공 할 것이다.

 2. abandon 한 commit 이 포함된 경우
    a. Gerrit Web UI에서 'Restore Change' 버튼을 찾는다.
    b. Restore Change 한다.
    c. 다시 Push 한다.


출처: https://gerrit-review.googlesource.com/Documentation/error-change-closed.html

   

2018년 3월 7일 수요일

[javascript] unexpected String

출처: https://stackoverflow.com/questions/22999120/uncaught-syntaxerror-unexpected-string-in-my-javascript

string을 잘못 사용했을때 발생한다.

var options = $(this).data('options').filter('[value="' + checkval + '"]');
와 같이 + 를 사용해서 변수와 string을 이어주자.

I'm getting the Uncaught SyntaxError: Unexpected string error in my JavaScript and I honestly can't figure out what's wrong with the code. I have looked at the similar questions, but I'm unable to find a solution. The error is coming in the line highlighted with an asterisk below.
$("#items1").change(function () {
    if ($(this).data('options') === undefined) {
        $(this).data('options', $('#items2 option').clone());
    }
    var checkval = $(this).val();
/* this line: */ var options = $(this).data('options').filter('[value='"+ checkval +"']');
    $('#items2').html(options);
});
I've added the extra quotes around the checkval to get rid of another error, this might be the problem, but if I change it, the other error returns.

4 Answers

It should be:
var options = $(this).data('options').filter('[value="' + checkval + '"]');
The double quotes need to be inside the single quotes.